public InputSpace(IIdentifiable identity, IValueDefinition valueDefinition, ISpatialDefinition spatialDefinition, IBaseLinkableComponent component, IValueSetConverter valueSetConverter)
            : base(identity, valueDefinition, spatialDefinition, component)
        {
            _valueSetConverter = valueSetConverter;

            if (_valueSetConverter != null)
                _valueSetConverter.ExchangeItem = this;
        }
        public Output(IValueDefinition valueDefinition, IBaseLinkableComponent component, IValueSetConverter valueSetConverter)
            : base(valueDefinition, component)
        {
            _valueSetConverter = valueSetConverter;

            if (_valueSetConverter != null)
                _valueSetConverter.ExchangeItem = this;
        }
        public BaseExchangeItem(IIdentifiable identity, IBaseLinkableComponent component, IValueDefinition iValueDefinition, IValueSetConverter iValueSetConverter)
            : base(identity, component, iValueDefinition)
        {
            //           _componentId = _component != null ? _component.Id : string.Empty;

            _valueSetConverter = iValueSetConverter;

            if (_valueSetConverter != null)
                _valueSetConverter.ExchangeItem = this;
        }
        public BaseExchangeItem(IBaseExchangeItem item)
            : base(item)
        {
            //            _componentId = _component != null ? _component.Id : string.Empty;

            BaseExchangeItem e = item as BaseExchangeItem;

            if (e != null)
            {
                // Need to clone e._valueSetConverter?

                _valueSetConverter = e._valueSetConverter;

                if (_valueSetConverter != null)
                    _valueSetConverter.ExchangeItem = this;
            }
        }
        public void Initialise(XElement xElement, IDocumentAccessor accessor)
        {
            xElement = Persistence.ThisOrSingleChild(XName, xElement);

            Identity = Persistence.Identity.Parse(xElement, accessor);
            ValueDefinition = Persistence.ValueDefinition.Parse(xElement, accessor);
            SpatialDefinition = Persistence.SpatialDefinition.Parse(xElement, accessor);

            Component = null;
            Provider = null;

            _userVariables = xElement
                .Elements("User")
                .ToDictionary(k => Utilities.Xml.GetAttribute(k, "key"), v => Utilities.Xml.GetAttribute(v, "value"));

            _valueSetConverter = Persistence.Parse<IValueSetConverter>("ValueSetConverter", xElement, accessor);
            _valueSetConverter.ExchangeItem = this;
        }
        public BaseExchangeItem(IBaseLinkableComponent component, XElement xElement, IDocumentAccessor accessor)
            : base(Persistence.Identity.Parse(xElement.Elements(Persistence.Identity.XName).Single(), accessor))
        {
            Contract35.Requires(xElement.Name == BaseExchangeItem.XName);

            Component = component;
            //            _componentId = Utilities.Xml.GetAttribute(xElement, "componentId");

            if (xElement.Elements(Persistence.ValueDefinition.XName).SingleOrDefault() != null)
                ValueDefinition = Persistence.ValueDefinition.Parse(
                    xElement.Element(Persistence.ValueDefinition.XName), accessor);

            _valueSetConverter = null;

            foreach (XElement xUserVariable in xElement.Elements("UserVariable"))
                _userVariables.Add(
                    Utilities.Xml.GetAttribute(xUserVariable, "key"),
                    Utilities.Xml.GetAttribute(xUserVariable, "value"));
        }