コード例 #1
0
        /// <summary>
        /// Set the values of a ReqIF enum (single value or multi value) in the ReqIF (AttributeDefinition)
        /// </summary>
        /// <param name="attributeValueEnumeration"></param>
        /// <param name="value"></param>
        public bool SetReqIfEnumValue(AttributeValueEnumeration attributeValueEnumeration, string value, EA.Element el = null)
        {
            if (attributeValueEnumeration.Definition == null)
            {
                return(true);
            }
            // delete old values
            attributeValueEnumeration.Values.Clear();

            if (!attributeValueEnumeration.Definition.IsMultiValued)
            {
                // single value enum
                // Check if valid value
                if (String.IsNullOrWhiteSpace(value))
                {
                    MessageBox.Show($@"Empty value of ReqIF Attribute: '{attributeValueEnumeration.Definition.LongName}'

Req:     '{el?.Name}'
ReqGuid: '{el?.ElementGUID}'

", @"Can't find enum value, break");
                    return(false);
                }

                var enumValue = attributeValueEnumeration.Definition.Type.SpecifiedValues
                                .SingleOrDefault(x => x.LongName == value.Trim());
                if (enumValue == null)
                {
                    MessageBox.Show($@"ReqIF Attribute: '{attributeValueEnumeration.Definition.LongName}'

Value='{value}'
", @"Can't find enum value, break");
                    return(false);
                }
                attributeValueEnumeration.Values.Add(enumValue);
            }
            else
            {   // all enums (multi value enum)
                // no value is valid
                if (String.IsNullOrWhiteSpace(value))
                {
                    return(true);
                }

                var enumValues = attributeValueEnumeration.Definition.Type.SpecifiedValues
                                 .Select(x => x);
                var values = Regex.Replace(value.Trim(), @"\r\n?|\n|;|,|:|-|=", ",").Split(',');
                int index  = 0;
                foreach (EnumValue enumValue in enumValues)
                {
                    if (values.Length > index && values[index] == "1")
                    {
                        attributeValueEnumeration.Values.Add(enumValue);
                    }
                    index += 1;
                }
            }

            return(true);
        }
コード例 #2
0
        public void Verify_That_Exception_Is_Raised_When_Invalid_AttributeDefinition_Is_Set()
        {
            var attributeDefinitionString = new AttributeDefinitionString();
            var attributeValueEnumeration = new AttributeValueEnumeration();
            var attributeValue            = (AttributeValue)attributeValueEnumeration;

            Assert.Throws <ArgumentException>(() => attributeValue.AttributeDefinition = attributeDefinitionString);
        }
コード例 #3
0
        public void VerifytThatExceptionIsRaisedWhenInvalidAttributeDefinitionIsSet()
        {
            var attributeDefinitionString = new AttributeDefinitionString();
            var attributeValueEnumeration = new AttributeValueEnumeration();
            var attributeValue            = (AttributeValue)attributeValueEnumeration;

            Assert.Throws <ArgumentException>(() => attributeValue.AttributeDefinition = attributeDefinitionString);
        }
コード例 #4
0
        public void Verify_That_WriteXml_Without_Definition_Set_Throws_SerializationException()
        {
            using var memoryStream = new MemoryStream();
            using var writer       = XmlWriter.Create(memoryStream, new XmlWriterSettings { Indent = true });
            var attributeValueEnumeration = new AttributeValueEnumeration();

            Assert.That(() => attributeValueEnumeration.WriteXml(writer),
                        Throws.Exception.TypeOf <SerializationException>());
        }
コード例 #5
0
        public void Verify_that_when_ObjectValue_is_not_real_an_exception_is_thrown()
        {
            var attributeValue = new AttributeValueEnumeration();

            Assert.That(
                () => attributeValue.ObjectValue = "true",
                Throws.Exception.TypeOf <InvalidOperationException>()
                .With.Message.Contains("The value to set is not an IEnumerable<EnumValue>."));
        }
コード例 #6
0
        public void Verify_That_WriteXmlAsync_Without_Definition_Set_Throws_SerializationException()
        {
            using var memoryStream = new MemoryStream();
            using var writer       = XmlWriter.Create(memoryStream, new XmlWriterSettings { Indent = true });
            var attributeValueEnumeration = new AttributeValueEnumeration();

            var cts = new CancellationTokenSource();

            Assert.That(async() => await attributeValueEnumeration.WriteXmlAsync(writer, cts.Token),
                        Throws.Exception.TypeOf <SerializationException>());
        }
コード例 #7
0
        public void VerifyConvenienceValueProperty()
        {
            var attributeValue = new AttributeValueEnumeration();

            var val = new List <EnumValue> {
                new EnumValue()
            };

            attributeValue.ObjectValue = val;

            Assert.AreEqual(attributeValue.Values.Count, 1);
        }
コード例 #8
0
        public void Verify_Convenience_Value_Property()
        {
            var attributeValue = new AttributeValueEnumeration();

            var val = new List <EnumValue> {
                new EnumValue()
            };

            attributeValue.ObjectValue = val;

            Assert.That(attributeValue.Values.Count, Is.EqualTo(1));
        }
コード例 #9
0
 public void VerifyThatWriteXmlWithoutDefinitionSetThrowsSerializationException()
 {
     using (var fs = new FileStream("test.xml", FileMode.Create))
     {
         using (var writer = XmlWriter.Create(fs, new XmlWriterSettings {
             Indent = true
         }))
         {
             var attributeValueEnumeration = new AttributeValueEnumeration();
             Assert.Throws <SerializationException>(() => attributeValueEnumeration.WriteXml(writer));
         }
     }
 }
コード例 #10
0
        private void AddAttributeButton_Click(object sender, RoutedEventArgs e)
        {
            var dataGridRowIndex = ((sender as Button).BindingGroup.Owner as DataGridRow).GetIndex();
            AttributeDefinition selectedAttribute = _attributes[dataGridRowIndex].AttributeDefinition;
            AttributeValue      attributeValue    = null;

            if (selectedAttribute.GetType() == typeof(AttributeDefinitionBoolean))
            {
                attributeValue             = new AttributeValueBoolean();
                attributeValue.ObjectValue = false;
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionDate))
            {
                attributeValue             = new AttributeValueDate();
                attributeValue.ObjectValue = DateTime.Now;
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionEnumeration))
            {
                attributeValue = new AttributeValueEnumeration();
                List <EnumValue> enumValues = new List <EnumValue>();
                enumValues.Add(((DatatypeDefinitionEnumeration)selectedAttribute.DatatypeDefinition).SpecifiedValues.First());
                attributeValue.ObjectValue = enumValues;
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionInteger))
            {
                attributeValue             = new AttributeValueInteger();
                attributeValue.ObjectValue = "";
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionReal))
            {
                attributeValue             = new AttributeValueReal();
                attributeValue.ObjectValue = "";
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionString))
            {
                attributeValue             = new AttributeValueString();
                attributeValue.ObjectValue = "";
            }
            else if (selectedAttribute.GetType() == typeof(AttributeDefinitionXHTML))
            {
                attributeValue             = new AttributeValueXHTML();
                attributeValue.ObjectValue = "<div></div>";
            }
            attributeValue.AttributeDefinition           = selectedAttribute;
            attributeValue.SpecElAt                      = (Application.Current.MainWindow as MainWindow).content.SpecObjects.SingleOrDefault(x => x.Identifier == _specObject.Identifier);
            _attributes[dataGridRowIndex].AttributeValue = attributeValue;
            _attributes[dataGridRowIndex].added          = true;
        }
コード例 #11
0
        public void Verify_That_The_AttributeDefinition_Can_Be_Set_Or_Get()
        {
            var attributeDefinitionEnumeration = new AttributeDefinitionEnumeration();

            var attributeValueEnumeration = new AttributeValueEnumeration();

            attributeValueEnumeration.Definition = attributeDefinitionEnumeration;

            var attributeValue = (AttributeValue)attributeValueEnumeration;

            Assert.That(attributeValue.AttributeDefinition, Is.EqualTo(attributeDefinitionEnumeration));

            attributeValue.AttributeDefinition = attributeDefinitionEnumeration;

            Assert.That(attributeValue.AttributeDefinition, Is.EqualTo(attributeDefinitionEnumeration));
        }
コード例 #12
0
        public void VerifyThatTheAttributeDefinitionCanBeSetOrGet()
        {
            var attributeDefinitionEnumeration = new AttributeDefinitionEnumeration();

            var attributeValueEnumeration = new AttributeValueEnumeration();

            attributeValueEnumeration.Definition = attributeDefinitionEnumeration;

            var attributeValue = (AttributeValue)attributeValueEnumeration;

            Assert.AreEqual(attributeDefinitionEnumeration, attributeValue.AttributeDefinition);

            attributeValue.AttributeDefinition = attributeDefinitionEnumeration;

            Assert.AreEqual(attributeDefinitionEnumeration, attributeValue.AttributeDefinition);
        }
コード例 #13
0
        /// <summary>
        /// Create <see cref="AttributeValue"/> For <see cref="SpecElementWithAttributes"/>
        /// </summary>
        /// <param name="specElementWithAttributes">
        /// The <see cref="SpecElementWithAttributes"/> to which <see cref="AttributeValue"/>s need to be added.
        /// </param>
        /// <param name="specType">
        /// The <see cref="SpecType"/> of the <see cref="specElementWithAttributes"/>
        /// </param>
        private void CreateValuesForSpecElementWithAttributes(SpecElementWithAttributes specElementWithAttributes, SpecType specType)
        {
            var attributeValueBoolean = new AttributeValueBoolean();

            attributeValueBoolean.Definition = (AttributeDefinitionBoolean)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionBoolean));
            attributeValueBoolean.TheValue   = true;
            specElementWithAttributes.Values.Add(attributeValueBoolean);

            var attributeValueDate = new AttributeValueDate();

            attributeValueDate.Definition = (AttributeDefinitionDate)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionDate));
            attributeValueDate.TheValue   = XmlConvert.ToDateTime("2015-12-01", XmlDateTimeSerializationMode.Utc);
            specElementWithAttributes.Values.Add(attributeValueDate);

            var attributeValueEnumeration = new AttributeValueEnumeration();

            attributeValueEnumeration.Definition = (AttributeDefinitionEnumeration)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionEnumeration));
            var enumValue = attributeValueEnumeration.Definition.Type.SpecifiedValues.FirstOrDefault();

            attributeValueEnumeration.Values.Add(enumValue);
            specElementWithAttributes.Values.Add(attributeValueEnumeration);

            var attributeValueInteger = new AttributeValueInteger();

            attributeValueInteger.Definition = (AttributeDefinitionInteger)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionInteger));
            attributeValueInteger.TheValue   = 1;
            specElementWithAttributes.Values.Add(attributeValueInteger);

            var attributeValueReal = new AttributeValueReal();

            attributeValueReal.Definition = (AttributeDefinitionReal)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionReal));
            attributeValueReal.TheValue   = 100;
            specElementWithAttributes.Values.Add(attributeValueReal);

            var attributeValueString = new AttributeValueString();

            attributeValueString.Definition = (AttributeDefinitionString)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionString));
            attributeValueString.TheValue   = "a string value";
            specElementWithAttributes.Values.Add(attributeValueString);

            var attributeValueXhtml = new AttributeValueXHTML();

            attributeValueXhtml.Definition = (AttributeDefinitionXHTML)specType.SpecAttributes.SingleOrDefault(x => x.GetType() == typeof(AttributeDefinitionXHTML));
            attributeValueXhtml.TheValue   = this.xhtmlcontent;
            specElementWithAttributes.Values.Add(attributeValueXhtml);
        }
コード例 #14
0
        public void Verify_That_WriteXmlAsync_Throws_Exception_when_cancelled()
        {
            using var memoryStream = new MemoryStream();
            using var writer       = XmlWriter.Create(memoryStream, new XmlWriterSettings { Indent = true });

            var attributeValueEnumeration = new AttributeValueEnumeration
            {
                Definition = new AttributeDefinitionEnumeration()
            };

            var cts = new CancellationTokenSource();

            cts.Cancel();

            Assert.That(
                async() => await attributeValueEnumeration.WriteXmlAsync(writer, cts.Token),
                Throws.Exception.TypeOf <OperationCanceledException>());
        }
コード例 #15
0
        /// <summary>
        /// Change ReqIF value of the specObject and the attribute value. The Attribute must be part of the ReqIF file.
        /// </summary>
        /// <param name="specObject"></param>
        /// <param name="name"></param>
        /// <param name="eaValue"></param>
        /// <param name="caseSensitive"></param>
        /// <returns></returns>
        private bool RoundtripChangeValueReqIf(SpecObject specObject, string name, string eaValue, bool caseSensitive = false)
        {
            try
            {
                AttributeValue attrValueObject = caseSensitive
                    ? specObject.Values.SingleOrDefault(x => x.AttributeDefinition.LongName == name)
                    : specObject.Values.SingleOrDefault(x =>
                                                        x.AttributeDefinition.LongName.ToLower() == name.ToLower());
                // Attribute not part of ReqIF, skip
                if (attrValueObject == null)
                {
                    // Create AttributValue and assign them to values.
                    AttributeDefinition attributeType =
                        _moduleAttributeDefinitions.SingleOrDefault(x => x.LongName.ToLower() == name.ToLower());
                    switch (attributeType)
                    {
                    case AttributeDefinitionString _:
                        attrValueObject = new AttributeValueString
                        {
                            AttributeDefinition = attributeType
                        };
                        break;

                    case AttributeDefinitionXHTML _:
                        attrValueObject = new AttributeValueXHTML
                        {
                            AttributeDefinition = attributeType
                        };
                        break;

                    case AttributeDefinitionEnumeration moduleAttributDefinitionEnumeration:
                        attrValueObject = new AttributeValueEnumeration
                        {
                            AttributeDefinition = attributeType
                        };
                        break;
                    }

                    if (attrValueObject == null)
                    {
                        return(true);                         // not supported datatype
                    }
                    specObject.Values.Add(attrValueObject);
                }

                var attrType = attrValueObject.AttributeDefinition; //specObj.Values[0].AttributeDefinition.LongName;
                switch (attrType)
                {
                case AttributeDefinitionXHTML _:
                    // make xhtml and handle new line
                    var xhtmlcontent = MakeXhtmlFromString(eaValue);
                    attrValueObject.ObjectValue = xhtmlcontent;
                    break;

                case AttributeDefinitionString _:
                    attrValueObject.ObjectValue = eaValue;
                    break;

                case AttributeDefinitionEnumeration _:

                    try
                    {
                        // take all the valid enums
                        if (!SetReqIfEnumValue((AttributeValueEnumeration)attrValueObject, eaValue))
                        {
                            return(false);
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show($@"Name: '{name}'

Value: '{eaValue}'

{e}", $@"Error enumeration value TV '{name}'.");
                    }

                    break;
                }

                return(true);
            }
            catch (Exception e)
            {
                MessageBox.Show($@"Name: '{name}'

Value: '{eaValue}'

{e}", $@"Error value TV '{name}'.");
                return(false);
            }
        }
コード例 #16
0
        /// <summary>
        /// Returns the <see cref="AttributeValue"/> representation of the value of a <see cref="SimpleParameterValue"/>
        /// </summary>
        /// <param name="parameterType">The <see cref="ParameterType"/></param>
        /// <param name="attributeDefinition">The associated <see cref="AttributeDefinition"/></param>
        /// <param name="valuearray">The <see cref="ValueArray{String}"/> containing the values</param>
        /// <param name="scale">The scale used</param>
        /// <returns>The <see cref="AttributeValue"/></returns>
        private AttributeValue ToReqIfAttributeValue(ParameterType parameterType, AttributeDefinition attributeDefinition, ValueArray <string> valuearray, MeasurementScale scale = null)
        {
            if (parameterType == null)
            {
                throw new ArgumentNullException("parameterType");
            }

            if (parameterType is EnumerationParameterType)
            {
                var enumParameterType = (EnumerationParameterType)parameterType;

                var concatEnumValue  = valuearray.Single();
                var enumValues       = concatEnumValue.Split(parameterEnumSeparator).Select(x => x.Trim()); // retrieve the list of litteral
                var valueDefinitions = enumParameterType.ValueDefinition.Where(x => enumValues.Contains(x.ShortName)).ToList();

                // Assuming the model is not wrong the values in the SimpleParameterValue references the ValueDefinition by its ShortName

                var attributeValue = new AttributeValueEnumeration
                {
                    Definition = (AttributeDefinitionEnumeration)attributeDefinition
                };

                var reqIfEnumValues = ((DatatypeDefinitionEnumeration)attributeDefinition.DatatypeDefinition).SpecifiedValues;
                attributeValue.Values.AddRange(valueDefinitions.Select(x => reqIfEnumValues.Single(e => e.Properties.OtherContent == x.ShortName)));

                return(attributeValue);
            }

            if (parameterType is DateParameterType ||
                parameterType is DateTimeParameterType ||
                parameterType is TimeOfDayParameterType)
            {
                var      value = valuearray.SingleOrDefault();
                DateTime date;

                if (!DateTime.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out date))
                {
                    throw new InvalidOperationException(string.Format("The string {0} cannot be parsed to a DateTime", value));
                }

                return(new AttributeValueDate
                {
                    TheValue = date,
                    Definition = (AttributeDefinitionDate)attributeDefinition
                });
            }

            if (parameterType is TextParameterType)
            {
                var value = valuearray.Single();
                return(new AttributeValueString
                {
                    TheValue = value,
                    Definition = (AttributeDefinitionString)attributeDefinition
                });
            }

            if (parameterType is BooleanParameterType)
            {
                var value   = valuearray.Single();
                var boolean = Boolean.Parse(value);

                return(new AttributeValueBoolean
                {
                    TheValue = boolean,
                    Definition = (AttributeDefinitionBoolean)attributeDefinition
                });
            }

            if (parameterType is QuantityKind)
            {
                var value = valuearray.Single();
                return(new AttributeValueString
                {
                    TheValue = string.Format("{0} [{1}]", value, scale != null ? scale.ShortName : "-"),
                    Definition = (AttributeDefinitionString)attributeDefinition
                });
            }


            // CompoundParameterType
            var compoundType = (CompoundParameterType)parameterType;
            var theValue     = "Error: The value could not be parsed.";

            if (valuearray.Count() == compoundType.Component.Count)
            {
                var values = new List <string>();
                for (var i = 0; i < valuearray.Count(); i++)
                {
                    var component = compoundType.Component[i].Scale != null ? compoundType.Component[i].Scale.ShortName : "-";
                    values.Add(string.Format("{0}: {1} [{2}]", compoundType.Component[i].ShortName, valuearray[i], component));
                }

                theValue = string.Format("{{ {0} }}", string.Join(", ", values));
            }

            return(new AttributeValueString
            {
                TheValue = theValue,
                Definition = (AttributeDefinitionString)attributeDefinition
            });
        }
 public static Attribute Load(XElement e)
 {
     return(new Attribute {
         Name = e.Attribute("name")?.Value,
         Formats = AttributeFormat.Get(e.Attribute("format")?.Value).ToList(),
         Enumerations = e.Elements("flag").Concat(e.Elements("enum")).Select(c => AttributeValueEnumeration.Load(c)).ToList()
     });
 }