/******************************************************************************* * Copyright (c) 2006-2011 Gluster, Inc. <http://www.gluster.com> * This file is part of Gluster Management Console. * * Gluster Management Console is free software; you can redistribute * it and/or modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * Gluster Management Console 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 for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see * <http://www.gnu.org/licenses/>. *******************************************************************************/ package org.ovirt.engine.core.common.businessentities; import java.util.ArrayList; import java.util.Collection; import org.ovirt.engine.core.common.utils.GlusterCoreUtil; import org.ovirt.engine.core.common.utils.StringUtil; public class GlusterDiskEntity extends GlusterDeviceEntity { private String description; // interface = pci, raid0, raid3, etc private String diskInterface; private Collection<GlusterPartitionEntity> partitions = new ArrayList<GlusterPartitionEntity>(); // In case of a software raid, the disk will contain an array of other disks private Collection<GlusterDiskEntity> raidDisks; public GlusterDiskEntity() { } public void setDescription(String description) { this.description = description; } public String getDescription() { return description; } public String getDiskInterface() { return diskInterface; } public void setDiskInterface(String diskInterface) { this.diskInterface = diskInterface; } public Collection<GlusterDiskEntity> getRaidDisks() { return raidDisks; } public void setRaidDisks(Collection<GlusterDiskEntity> raidDisks) { this.raidDisks = raidDisks; } public void setPartitions(Collection<GlusterPartitionEntity> partitions) { this.partitions = partitions; } public Collection<GlusterPartitionEntity> getPartitions() { return partitions; } public boolean hasPartitions() { return (partitions != null && partitions.size() > 0); } public GlusterDiskEntity(String serverName, String name, String mountPoint, Double space, Double spaceInUse, DEVICE_STATUS status) { super(serverName, name, mountPoint, space, spaceInUse, status); } @Override public boolean filter(String filterString, boolean caseSensitive) { if (StringUtil.filterString(getServerName() + getName() + getStatusStr() + getSpace() + getFreeSpace() + getType() + getDescription(), filterString, caseSensitive)) { return true; } // disk doesn't match. check if any of the partitions of this disk match the filter for (GlusterPartitionEntity partition : getPartitions()) { if (partition.filter(filterString, caseSensitive)) { return true; } } return false; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof GlusterDiskEntity)) { return false; } GlusterDiskEntity disk = (GlusterDiskEntity) obj; if (!(super.equals(obj) && getDescription().equals(disk.getDescription()) && (getDiskInterface() == disk.getDiskInterface() || getDiskInterface().equals( disk.getDiskInterface())))) { return false; } if (raidDisks != null) { for (GlusterDiskEntity raidDisk : raidDisks) { // check if the disk contains same raid disks if (!(raidDisk.equals(GlusterCoreUtil.getEntity(disk.getRaidDisks(), raidDisk.getName(), false)))) { return false; } } } // // check if the disk contains same partitions // if (partitions != null) { // for (GlusterPartitionEntity partition : partitions) { // if (!(partition.equals(GlusterCoreUtil.getEntity(disk.getPartitions(), partition.getName(), false)))) { // return false; // } // } // } return true; } public void copyFrom(GlusterDiskEntity newDisk) { super.copyFrom(newDisk); setDescription(newDisk.getDescription()); setDiskInterface(newDisk.getDiskInterface()); setPartitions(newDisk.getPartitions()); setRaidDisks(newDisk.getRaidDisks()); } @Override public boolean isReady() { if (hasPartitions()) { for (GlusterPartitionEntity partition : getPartitions()) { if (partition.isReady()) { return true; } } return false; } else { return super.isReady(); } } @Override public Double getSpace() { Double space = 0d; if (hasPartitions()) { for (GlusterPartitionEntity partition : getPartitions()) { space += partition.getSpace(); } return space; } else { return super.getSpace(); } } @Override public Double getSpaceInUse() { Double spaceInUse = 0d; if (hasPartitions()) { for (GlusterPartitionEntity partition : getPartitions()) { if (partition.isInitialized()) { spaceInUse += partition.getSpaceInUse(); } } return spaceInUse; } else { return super.getSpaceInUse(); } } }