/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.target.lazy; import java.util.Map; import com.opengamma.core.position.Portfolio; import com.opengamma.core.position.PortfolioNode; import com.opengamma.engine.ComputationTargetResolver; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.id.UniqueId; /** * A portfolio implementation that defers to a target resolver for the component parts. */ public final class TargetResolverPortfolio extends TargetResolverObject implements Portfolio { private static final long serialVersionUID = 1L; private final Map<String, String> _attributes; private final UniqueId _uniqueId; private final ComputationTargetSpecification _rootNodeSpec; private transient volatile PortfolioNode _rootNode; private final String _name; public TargetResolverPortfolio(final ComputationTargetResolver.AtVersionCorrection targetResolver, final Portfolio copyFrom) { super(targetResolver); _attributes = copyFrom.getAttributes(); _uniqueId = copyFrom.getUniqueId(); _rootNodeSpec = ComputationTargetSpecification.of(copyFrom.getRootNode()); _name = copyFrom.getName(); } @Override public Map<String, String> getAttributes() { return _attributes; } @Override public void setAttributes(Map<String, String> attributes) { _attributes.clear(); _attributes.putAll(attributes); } @Override public void addAttribute(String key, String value) { _attributes.put(key, value); } @Override public UniqueId getUniqueId() { return _uniqueId; } @Override public PortfolioNode getRootNode() { if (_rootNode == null) { synchronized (this) { if (_rootNode == null) { _rootNode = new LazyTargetResolverPortfolioNode(getTargetResolver(), _rootNodeSpec); } } } return _rootNode; } @Override public String getName() { return _name; } }