예제 #1
0
        private void CreateExchangeItemsFromXMLNode(XmlNode ExchangeItem, string Identifier)
        {
            //Create Dimensions
            Dimension   omiDimensions = new Dimension();
            XmlNodeList dimensions    = ExchangeItem.SelectNodes("//Dimensions/Dimension"); // You can filter elements here using XPath

            foreach (XmlNode dimension in dimensions)
            {
                if (dimension["Base"].InnerText == "Length")
                {
                    omiDimensions.SetPower(DimensionBase.Length, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "Time")
                {
                    omiDimensions.SetPower(DimensionBase.Time, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "AmountOfSubstance")
                {
                    omiDimensions.SetPower(DimensionBase.AmountOfSubstance, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "Currency")
                {
                    omiDimensions.SetPower(DimensionBase.Currency, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "ElectricCurrent")
                {
                    omiDimensions.SetPower(DimensionBase.ElectricCurrent, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "LuminousIntensity")
                {
                    omiDimensions.SetPower(DimensionBase.LuminousIntensity, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "Mass")
                {
                    omiDimensions.SetPower(DimensionBase.Mass, Convert.ToDouble(dimension["Power"].InnerText));
                }
                else if (dimension["Base"].InnerText == "Temperature")
                {
                    omiDimensions.SetPower(DimensionBase.Temperature, Convert.ToDouble(dimension["Power"].InnerText));
                }
            }

            //Create Units
            _omiUnits = new Unit();
            XmlNode units = ExchangeItem.SelectSingleNode("Quantity/Unit");

            _omiUnits.ID = units["ID"].InnerText;
            if (units["Description"] != null)
            {
                _omiUnits.Description = units["Description"].InnerText;
            }
            if (units["ConversionFactorToSI"] != null)
            {
                _omiUnits.ConversionFactorToSI = Convert.ToDouble(units["ConversionFactorToSI"].InnerText);
            }
            if (units["OffSetToSI"] != null)
            {
                _omiUnits.OffSetToSI = Convert.ToDouble(units["OffSetToSI"].InnerText);
            }

            //Create Quantity
            Quantity omiQuantity = new Quantity();
            XmlNode  quantity    = ExchangeItem.SelectSingleNode("Quantity");

            omiQuantity.ID = quantity["ID"].InnerText;
            if (quantity["Description"] != null)
            {
                omiQuantity.Description = quantity["Description"].InnerText;
            }
            omiQuantity.Dimension = omiDimensions;
            omiQuantity.Unit      = _omiUnits;
            if (quantity["ValueType"] != null)
            {
                if (quantity["ValueType"].InnerText == "Scalar")
                {
                    omiQuantity.ValueType = OpenMI.Standard.ValueType.Scalar;
                }
                else if (quantity["ValueType"].InnerText == "Vector")
                {
                    omiQuantity.ValueType = OpenMI.Standard.ValueType.Vector;
                }
            }

            //Create Element Set
            ElementSet omiElementSet = new ElementSet();
            XmlNode    elementSet    = ExchangeItem.SelectSingleNode("ElementSet");

            omiElementSet.ID = elementSet["ID"].InnerText;
            if (elementSet["Description"] != null)
            {
                omiElementSet.Description = elementSet["Description"].InnerText;
            }

            try
            {
                //add elements from shapefile to element set
                SMW.Utilities utils = new SMW.Utilities();
                _shapefilepath = elementSet["ShapefilePath"].InnerText;
                omiElementSet  = utils.AddElementsFromShapefile(omiElementSet, _shapefilepath);
            }
            catch (Exception)
            {
                Debug.WriteLine("An Element Set has not been declared using AddElementsFromShapefile");
            }



            if (Identifier == "OutputExchangeItem")
            {
                //create exchange item
                OutputExchangeItem omiOutputExchangeItem = new OutputExchangeItem();
                omiOutputExchangeItem.Quantity   = omiQuantity;
                omiOutputExchangeItem.ElementSet = omiElementSet;

                //add the output exchange item to the list of output exchange items for the component
                this._outputs.Add(omiOutputExchangeItem);
                if (!this._quantities.ContainsKey(omiQuantity.ID))
                {
                    this._quantities.Add(omiQuantity.ID, omiQuantity);
                }
                if (!this._elementSets.ContainsKey(omiElementSet.ID))
                {
                    this._elementSets.Add(omiElementSet.ID, omiElementSet);
                }
            }
            else if (Identifier == "InputExchangeItem")
            {
                //create exchange item
                InputExchangeItem omiInputExchangeItem = new InputExchangeItem();
                omiInputExchangeItem.Quantity   = omiQuantity;
                omiInputExchangeItem.ElementSet = omiElementSet;


                //add the output exchange item to the list of output exchange items for the component
                this._inputs.Add(omiInputExchangeItem);
                if (!this._quantities.ContainsKey(omiQuantity.ID))
                {
                    this._quantities.Add(omiQuantity.ID, omiQuantity);
                }
                if (!this._elementSets.ContainsKey(omiElementSet.ID))
                {
                    this._elementSets.Add(omiElementSet.ID, omiElementSet);
                }
            }
        }
예제 #2
0
        private void CreateExchangeItemsFromXMLNode(XmlNode ExchangeItem, string Identifier, int eid)
        {
            //-- get dimension child nodes
            XmlNodeList children             = ExchangeItem.ChildNodes;
            XmlNode     quantityNode         = children[1]; //HACK
            Dictionary <string, double> dims = new Dictionary <string, double>();

            foreach (XmlNode child in quantityNode)
            {
                if (child.Name == "Dimensions")
                {
                    foreach (XmlNode dimension in child.ChildNodes)
                    {
                        //-- get the inner xml for the element
                        string text = dimension.InnerXml;

                        //-- get the start and end indices of "base" and "power"
                        int[] indices = new int[4] {
                            text.IndexOf("<Base>") + 6, text.IndexOf("</Base>") - 1,
                            text.IndexOf("<Power>") + 7, text.IndexOf("</Power>") - 1
                        };

                        //-- build base
                        string Base = "";
                        for (int i = indices[0]; i <= indices[1]; i++)
                        {
                            Base += text[i];
                        }

                        //-- build power
                        string power = "";
                        for (int i = indices[2]; i <= indices[3]; i++)
                        {
                            power += text[i];
                        }

                        //-- store dimension name and power
                        dims.Add(Base, Convert.ToDouble(power));
                    }
                }
            }


            //XmlNode dims = ExchangeItem.SelectSingleNode("//Dimensions");

            //Create Dimensions
            Dimension omiDimensions = new Dimension();

            //XmlNodeList dimensions = ExchangeItem.SelectNodes("//Dimensions/Dimension"); // You can filter elements here using XPath
            foreach (KeyValuePair <string, double> dim in dims)
            {
                if (dim.Key.ToUpper() == "LENGTH")
                {
                    omiDimensions.SetPower(DimensionBase.Length, dim.Value);
                }
                else if (dim.Key.ToUpper() == "TIME")
                {
                    omiDimensions.SetPower(DimensionBase.Time, dim.Value);
                }
                else if (dim.Key.ToUpper() == "AMOUNTOFSUBSTANCE")
                {
                    omiDimensions.SetPower(DimensionBase.AmountOfSubstance, dim.Value);
                }
                else if (dim.Key.ToUpper() == "CURRENCY")
                {
                    omiDimensions.SetPower(DimensionBase.Currency, dim.Value);
                }
                else if (dim.Key.ToUpper() == "ELECTRICCURRENT")
                {
                    omiDimensions.SetPower(DimensionBase.ElectricCurrent, dim.Value);
                }
                else if (dim.Key.ToUpper() == "LUMINOUSINTENSITY")
                {
                    omiDimensions.SetPower(DimensionBase.LuminousIntensity, dim.Value);
                }
                else if (dim.Key.ToUpper() == "MASS")
                {
                    omiDimensions.SetPower(DimensionBase.Mass, dim.Value);
                }
                else if (dim.Key.ToUpper() == "TEMPERATURE")
                {
                    omiDimensions.SetPower(DimensionBase.Temperature, dim.Value);
                }
            }

            //Create Units
            _omiUnits = new Unit();
            XmlNode units = ExchangeItem.SelectSingleNode("Quantity/Unit");

            _omiUnits.ID = units["ID"].InnerText;
            if (units["Description"] != null)
            {
                _omiUnits.Description = units["Description"].InnerText;
            }
            if (units["ConversionFactorToSI"] != null)
            {
                _omiUnits.ConversionFactorToSI = Convert.ToDouble(units["ConversionFactorToSI"].InnerText);
            }
            if (units["OffSetToSI"] != null)
            {
                _omiUnits.OffSetToSI = Convert.ToDouble(units["OffSetToSI"].InnerText);
            }

            //Create Quantity
            Quantity omiQuantity = new Quantity();
            XmlNode  quantity    = ExchangeItem.SelectSingleNode("Quantity");

            omiQuantity.ID = quantity["ID"].InnerText;
            if (quantity["Description"] != null)
            {
                omiQuantity.Description = quantity["Description"].InnerText;
            }
            omiQuantity.Dimension = omiDimensions;
            omiQuantity.Unit      = _omiUnits;
            if (quantity["ValueType"] != null)
            {
                if (quantity["ValueType"].InnerText == "Scalar")
                {
                    omiQuantity.ValueType = OpenMI.Standard.ValueType.Scalar;
                }
                else if (quantity["ValueType"].InnerText == "Vector")
                {
                    omiQuantity.ValueType = OpenMI.Standard.ValueType.Vector;
                }
            }

            //Create Element Set
            ElementSet omiElementSet = new ElementSet();
            XmlNode    elementSet    = ExchangeItem.SelectSingleNode("ElementSet");

            omiElementSet.ID = elementSet["ID"].InnerText;
            if (elementSet["Description"] != null)
            {
                omiElementSet.Description = elementSet["Description"].InnerText;
            }

            try
            {
                //add elements from shapefile to element set
                SMW.Utilities utils = new SMW.Utilities();
                _shapefilepath = elementSet["ShapefilePath"].InnerText;
                omiElementSet  = utils.AddElementsFromShapefile(omiElementSet, _shapefilepath);
            }
            catch (Exception)
            {
                Debug.WriteLine("An Element Set has not been declared using AddElementsFromShapefile");
            }



            if (Identifier == "OutputExchangeItem")
            {
                //create exchange item
                OutputExchangeItem omiOutputExchangeItem = new OutputExchangeItem();
                omiOutputExchangeItem.Quantity   = omiQuantity;
                omiOutputExchangeItem.ElementSet = omiElementSet;

                //add the output exchange item to the list of output exchange items for the component
                this._outputs.Add(omiOutputExchangeItem);
                if (!this._quantities.ContainsKey(omiQuantity.ID))
                {
                    this._quantities.Add(omiQuantity.ID, omiQuantity);
                }
                if (!this._elementSets.ContainsKey(omiElementSet.ID))
                {
                    this._elementSets.Add(omiElementSet.ID, omiElementSet);
                }
            }
            else if (Identifier == "InputExchangeItem")
            {
                //create exchange item
                InputExchangeItem omiInputExchangeItem = new InputExchangeItem();
                omiInputExchangeItem.Quantity   = omiQuantity;
                omiInputExchangeItem.ElementSet = omiElementSet;


                //add the output exchange item to the list of output exchange items for the component
                this._inputs.Add(omiInputExchangeItem);
                if (!this._quantities.ContainsKey(omiQuantity.ID))
                {
                    this._quantities.Add(omiQuantity.ID, omiQuantity);
                }
                if (!this._elementSets.ContainsKey(omiElementSet.ID))
                {
                    this._elementSets.Add(omiElementSet.ID, omiElementSet);
                }
            }
        }