use of es.bsc.compss.types.resources.exceptions.InvalidElementException in project compss by bsc-wdc.
the class Validator method validateComputeNode.
/**
* Validates the given ComputeNodeType @cn with the current ResourcesFileType The content is correct if no exception
* is raised
*
* @param cn
* @throws InvalidElementException
*/
public void validateComputeNode(ComputeNodeType cn) throws InvalidElementException {
// Check that name isn't used
int num = 0;
for (String c : rf.getComputeNodes_names()) {
if (c.equals(cn.getName())) {
num = num + 1;
}
}
if (num > 1) {
// ComputeNode already exists
throw new InvalidElementException("ComputeNode", cn.getName(), "Name already in use");
}
// Check inner elements
List<Object> innerElements = cn.getProcessorOrAdaptorsOrMemory();
if (innerElements != null) {
List<String> processorNames = new ArrayList<String>();
boolean processorTagFound = false;
boolean adaptorsTagFound = false;
boolean memoryTagFound = false;
boolean storageTagFound = false;
boolean osTagFound = false;
boolean softwareTagFound = false;
boolean sharedDisksTagFound = false;
boolean priceTagFound = false;
for (Object obj : innerElements) {
if (obj instanceof ProcessorType) {
ProcessorType p = (ProcessorType) obj;
if (processorNames.contains(p.getName())) {
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute Processor" + p.getName(), "Appears more than once");
} else {
processorTagFound = true;
processorNames.add(p.getName());
validateProcessor(p);
}
} else if (obj instanceof AdaptorsListType) {
if (adaptorsTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
adaptorsTagFound = true;
validateAdaptors(((AdaptorsListType) obj));
}
} else if (obj instanceof MemoryType) {
if (memoryTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
memoryTagFound = true;
validateMemory(((MemoryType) obj));
}
} else if (obj instanceof StorageType) {
if (storageTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
storageTagFound = true;
validateStorage(((StorageType) obj));
}
} else if (obj instanceof OSType) {
if (osTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
osTagFound = true;
validateOS(((OSType) obj));
}
} else if (obj instanceof SoftwareListType) {
if (softwareTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
softwareTagFound = true;
validateSoftwareList(((SoftwareListType) obj));
}
} else if (obj instanceof AttachedDisksListType) {
if (sharedDisksTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
sharedDisksTagFound = true;
validateAttachedDisksList(((AttachedDisksListType) obj));
}
} else if (obj instanceof PriceType) {
if (priceTagFound) {
// Second occurency, throw exception
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Appears more than once");
} else {
priceTagFound = true;
validatePrice(((PriceType) obj));
}
} else {
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute " + obj.getClass(), "Incorrect attribute");
}
}
// Check minimum appearences
if (!processorTagFound) {
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute Processor", "Doesn't appear");
}
if (!adaptorsTagFound) {
throw new InvalidElementException("ComputeNode " + cn.getName(), "Attribute Adaptors", "Doesn't appear");
}
} else {
// Empty inner elements
throw new InvalidElementException("ComputeNode " + cn.getName(), "", "Content is empty");
}
}
Aggregations