/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.tool.enginedebugger.node; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.target.ComputationTargetReference; import com.opengamma.engine.target.ComputationTargetRequirement; /** * Node representing a ComputationTargetReference */ public class ComputationTargetReferenceNode implements TreeTableNode { private static final Object NULL_NAME = "Null ComputationTargetReference"; private static final Object REQUIREMENT_NAME = "CompuatationTargetRequirement"; private static final Object SPECIFICATION_NAME = "CompuatationTargetSpecification"; private ComputationTargetReference _targetReference; @SuppressWarnings("unused") private Object _parent; public ComputationTargetReferenceNode(Object parent, ComputationTargetReference targetReference) { _parent = parent; _targetReference = targetReference; } @Override public Object getChildAt(int index) { if (_targetReference instanceof ComputationTargetRequirement) { ComputationTargetRequirement requirement = _targetReference.getRequirement(); switch (index) { case 0: return new ComputationTargetTypeNode(this, requirement.getType()); case 1: return new ExternalIdBundleNode(this, requirement.getIdentifiers()); default: return null; } } else { ComputationTargetSpecification specification = _targetReference.getSpecification(); switch (index) { case 0: return new ComputationTargetTypeNode(this, specification.getType()); case 1: return new UniqueIdNode(this, specification.getUniqueId()); default: return null; } } } @Override public int getChildCount() { return 2; } @Override public int getIndexOfChild(Object child) { if (child instanceof ComputationTargetTypeNode) { if (new ComputationTargetTypeNode(this, _targetReference.getType()).equals(child)) { return 0; } } else if (child instanceof ExternalIdBundleNode && _targetReference instanceof ComputationTargetRequirement) { ComputationTargetRequirement targetRequirement = (ComputationTargetRequirement) _targetReference; if (new ExternalIdBundleNode(this, targetRequirement.getIdentifiers()).equals(child)) { return 1; } } else if (child instanceof UniqueIdNode && _targetReference instanceof ComputationTargetSpecification) { ComputationTargetSpecification targetSpec = (ComputationTargetSpecification) _targetReference; if (new UniqueIdNode(this, targetSpec.getUniqueId()).equals(child)) { return 1; } } return -1; } @Override public Object getColumn(int column) { switch (column) { case 0: if (_targetReference == null) { return NULL_NAME; } else if (_targetReference instanceof ComputationTargetRequirement) { return REQUIREMENT_NAME; } else if (_targetReference instanceof ComputationTargetSpecification) { return SPECIFICATION_NAME; } case 1: return _targetReference.toString(); } return null; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_targetReference == null) ? 0 : _targetReference.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof ComputationTargetReferenceNode)) { return false; } ComputationTargetReferenceNode other = (ComputationTargetReferenceNode) obj; if (_targetReference == null) { if (other._targetReference != null) { return false; } } else if (!_targetReference.equals(other._targetReference)) { return false; } return true; } }