コード例 #1
0
        private static CAttribute Map(this C_ATTRIBUTE model)
        {
            CAttribute attribute;

            if (model is C_SINGLE_ATTRIBUTE)
            {
                attribute = new CSingleAttribute();
            }
            else if (model is C_MULTIPLE_ATTRIBUTE)
            {
                attribute = new CMultipleAttribute();
                ((CMultipleAttribute)attribute).Cardinality = ((C_MULTIPLE_ATTRIBUTE)model).cardinality.Map();
            }
            else
            {
                throw new ParseException(string.Format("'{0}' is not a valid attribute type.", model.GetType()));
            }

            attribute.Existence = model.existence.Map();
            attribute.ReferenceModelAttributeName = model.rm_attribute_name;
            if (model.children != null)
            {
                foreach (C_OBJECT child in model.children)
                {
                    attribute.Children.Add(child.Map(attribute));
                }
            }
            return(attribute);
        }
コード例 #2
0
ファイル: Pathable.cs プロジェクト: panky2sharma/OpenEHR
 protected override void SetAttributeValue(string attributeName, object value)
 {
     // Set Constraint
     if (value != null && HasConstraint)
     {
         CAttribute attributeConstraint = Constraint.GetAttribute(attributeName);
         if (attributeConstraint != null)
         {
             CMultipleAttribute multipleAttributeConstraint = attributeConstraint as CMultipleAttribute;
             if (multipleAttributeConstraint != null)
             {
                 IAggregate aggregate = value as IAggregate;
                 Check.Assert(aggregate != null, "value must implement IAggregate when attribute constraint is CMultipleAttribute");
                 aggregate.Constraint = multipleAttributeConstraint;
             }
             else
             {
                 bool isValid = false;
                 foreach (CObject objectConstraint in attributeConstraint.Children)
                 {
                     if (objectConstraint.ValidValue(value))
                     {
                         isValid = true;
                         IRmType rmType = value as IRmType;
                         if (rmType != null)
                         {
                             rmType.Constraint = objectConstraint;
                         }
                         break;
                     }
                 }
             }
         }
     }
 }
コード例 #3
0
        protected void Validate(CMultipleAttribute cMultipleAttribute)
        {
            this.ValidateBase((CAttribute)cMultipleAttribute);

            Invariant(cMultipleAttribute.Cardinality != null, string.Format(
                          CommonStrings.XMustNotBeNull, "CMultipleAttribute.Cardinality"));
            this.Validate(cMultipleAttribute.Cardinality);

            if (cMultipleAttribute.Members() != null)
            {
                foreach (CObject member in cMultipleAttribute.Members())
                {
                    Invariant(member.Occurrences.Upper <= 1,
                              AmValidationStrings.MultiAttributeMembersBad);
                }
            }
        }
コード例 #4
0
ファイル: AmFactory.cs プロジェクト: nickvane/OpenEHR
        internal static CAttribute CAttribute(string typeName)
        {
            DesignByContract.Check.Require(!string.IsNullOrEmpty(typeName), string.Format(CommonStrings.XMustNotBeNullOrEmpty, "typeName"));

            CAttribute cAttribute = null;

            switch (typeName)
            {
                case "C_SINGLE_ATTRIBUTE":
                    cAttribute = new CSingleAttribute();
                    break;
                case "C_MULTIPLE_ATTRIBUTE":
                    cAttribute = new CMultipleAttribute();
                    break;
                default:
                    throw new NotSupportedException("type not supported: " + typeName);
            }

            DesignByContract.Check.Ensure(cAttribute!= null, "cAttribute must not be null.");

            return cAttribute;
        }
コード例 #5
0
        void ReadCMultipleAttribute(XmlReader reader, CMultipleAttribute cMultipleAttribute)
        {
            Check.Require(cMultipleAttribute != null, string.Format(CommonStrings.XMustNotBeNull, "cMultipleAttribute"));

            reader.ReadStartElement();
            reader.MoveToContent();

            ReadCAttribute(reader, cMultipleAttribute);

            if (reader.LocalName != "cardinality")
            {
                throw new InvalidXmlException("cardinality" + reader.LocalName);
            }

            cMultipleAttribute.Cardinality = new Cardinality();
            amSerializer.ReadCardinality(reader, cMultipleAttribute.Cardinality);

            DesignByContract.Check.Assert(reader.NodeType == System.Xml.XmlNodeType.EndElement,
                                          "Expected endElement");
            reader.ReadEndElement();

            reader.MoveToContent();
        }
コード例 #6
0
        internal static CAttribute CAttribute(string typeName)
        {
            DesignByContract.Check.Require(!string.IsNullOrEmpty(typeName), string.Format(CommonStrings.XMustNotBeNullOrEmpty, "typeName"));

            CAttribute cAttribute = null;

            switch (typeName)
            {
            case "C_SINGLE_ATTRIBUTE":
                cAttribute = new CSingleAttribute();
                break;

            case "C_MULTIPLE_ATTRIBUTE":
                cAttribute = new CMultipleAttribute();
                break;

            default:
                throw new NotSupportedException("type not supported: " + typeName);
            }

            DesignByContract.Check.Ensure(cAttribute != null, "cAttribute must not be null.");

            return(cAttribute);
        }
コード例 #7
0
        void ReadCComplexObject(XmlReader reader, AM.Archetype.ConstraintModel.CComplexObject cComplexObject)
        {
            Check.Require(cComplexObject != null, string.Format(CommonStrings.XMustNotBeNull, "cComplexObject"));

            reader.ReadStartElement();
            reader.MoveToContent();

            amSerializer.ReadComplexObject(reader, cComplexObject);

            if (reader.LocalName == "attributes")
            {
                System.Collections.Generic.List <CAttribute> attrList = new System.Collections.Generic.List <CAttribute>();
                do
                {
                    string attributeType = reader.GetAttribute("type", RmXmlSerializer.XsiNamespace);
                    DesignByContract.Check.Assert(!string.IsNullOrEmpty(attributeType), "attributeType must not be null or empty.");

                    CAttribute attri = AmFactory.CAttribute(attributeType);
                    attri.parent = cComplexObject;

                    CMultipleAttribute multipleAttribute = attri as CMultipleAttribute;
                    if (multipleAttribute != null)
                    {
                        ReadCMultipleAttribute(reader, multipleAttribute);
                    }
                    else
                    {
                        ReadCSingleAttribute(reader, attri as CSingleAttribute);
                    }

                    //Special attention being paid to media types due to erronous codes in archetypes produced by AE

                    // %HYYKA%
                    // TODO: this must be reinstated when ConfigurationSource is able to be specified
                    //if (attri.RmAttributeName == "media_type")
                    //    ProcessMediaType(attri as CSingleAttribute);

                    attrList.Add(attri);
                } while (reader.LocalName == "attributes" && reader.NodeType != XmlNodeType.EndElement);

                if (cComplexObject.RmTypeName == "ITEM_TABLE")
                {
                    //remove spurious attributes
                    for (int i = attrList.Count - 1; i >= 0; i--)
                    {
                        string rmAttributeName = attrList[i].RmAttributeName;
                        if (rmAttributeName == "rotated" || rmAttributeName == "number_key_columns")
                        {
                            attrList.RemoveAt(i);
                        }
                    }
                }

                Check.Assert(attrList.Count > 0, "attrList must not be empty.");

                cComplexObject.Attributes = new OpenEhr.AssumedTypes.Set <CAttribute>(attrList);
            }


            if (reader.NodeType == System.Xml.XmlNodeType.EndElement)
            {
                reader.ReadEndElement();

                reader.MoveToContent();
            }
        }
コード例 #8
0
ファイル: RmType.cs プロジェクト: panky2sharma/OpenEHR
        protected void BuildPath(Path path)
        {
            Check.Require(path != null, "path must not be null");
            Check.Require(path.Current != null, "current path step must not be null");

            string attributeName = path.Current.Attribute;

            object value = GetAttributeValue(attributeName);

            if (value == null)
            {
                CComplexObject complexObjectConstraint = this.Constraint as CComplexObject;
                if (complexObjectConstraint == null)
                {
                    throw new NotImplementedException();
                }

                CAttribute attributeConstraint = complexObjectConstraint.GetAttribute(attributeName);
                if (attributeConstraint == null)
                {
                    throw new ApplicationException("constraint for attribute not found");
                }

                CMultipleAttribute multipleAttributeConstraint = attributeConstraint as CMultipleAttribute;

                if (multipleAttributeConstraint == null)
                {
                    if (attributeConstraint.Children.Count != 1)
                    {
                        throw new ApplicationException("Single attribute constraint must have exactly one children");
                    }

                    CObject        objectConstraint        = attributeConstraint.Children[0];
                    CDefinedObject definedObjectConstraint = objectConstraint as CDefinedObject;
                    if (definedObjectConstraint == null)
                    {
                        throw new NotImplementedException();
                    }

                    value = definedObjectConstraint.DefaultValue;
                    SetAttributeValue(attributeName, value);
                }
                else
                {
                    Type itemType = null;
                    value = multipleAttributeConstraint.CreateAggregate(itemType);
                    SetAttributeValue(attributeName, value);
                }
            }

            if (path.NextStep())
            {
                IRmType rmType = value as IRmType;
                if (rmType == null)
                {
                    AssumedTypes.IAggregate container = value as AssumedTypes.IAggregate;
                    if (container != null)
                    {
                        container.BuildPath(path);
                    }
                    else
                    {
                        throw new ApplicationException("expected IRmType");
                    }
                }
                else
                {
                    rmType.BuildPath(path);
                }
            }
        }
コード例 #9
0
ファイル: AmValidator.cs プロジェクト: nickvane/OpenEHR
        protected void Validate(CMultipleAttribute cMultipleAttribute)
        {
            this.ValidateBase((CAttribute)cMultipleAttribute);

            Invariant(cMultipleAttribute.Cardinality != null, string.Format(
                CommonStrings.XMustNotBeNull, "CMultipleAttribute.Cardinality"));
            this.Validate(cMultipleAttribute.Cardinality);

            if (cMultipleAttribute.Members() != null)
            {
                foreach (CObject member in cMultipleAttribute.Members())
                    Invariant(member.Occurrences.Upper <= 1,
                        AmValidationStrings.MultiAttributeMembersBad);
            }
        }
コード例 #10
0
 public void IsValidThrowsException()
 {
     var instance = new CMultipleAttribute();
     var result   = instance.IsValid();
 }
コード例 #11
0
 public void IsSubsetOfThrowsException()
 {
     var instance = new CMultipleAttribute();
     var result   = instance.IsSubsetOf(null);
 }
コード例 #12
0
        public void ListsAreNotNull()
        {
            var instance = new CMultipleAttribute();

            Assert.IsNotNull(instance.Members);
        }
コード例 #13
0
ファイル: AmXmlSerializer.cs プロジェクト: nickvane/OpenEHR
        private void ReadXml(CMultipleAttribute cMultipleAttribute)
        {
            Check.Require(cMultipleAttribute != null, string.Format(CommonStrings.XMustNotBeNull, "cMultipleAttribute"));

            reader.ReadStartElement();
            reader.MoveToContent();

            this.ReadXmlBase((CAttribute)cMultipleAttribute);

            if (reader.LocalName != "cardinality")
                throw new InvalidXmlException("cardinality" + reader.LocalName);

            cMultipleAttribute.Cardinality = new Cardinality();
            this.ReadXml(cMultipleAttribute.Cardinality);

            DesignByContract.Check.Assert(reader.NodeType == System.Xml.XmlNodeType.EndElement, "Expected endElement");
            reader.ReadEndElement();

            reader.MoveToContent();
        }
コード例 #14
0
ファイル: AmXmlSerializer.cs プロジェクト: nickvane/OpenEHR
        private void WriteXml(CMultipleAttribute cMultipleAttribute)
        {
            this.WriteXmlBase((CAttribute)cMultipleAttribute);

            writer.WriteStartElement(UseOpenEhrPrefix(writer), "cardinality", RmXmlSerializer.OpenEhrNamespace);
            this.WriteXml(cMultipleAttribute.Cardinality);
            writer.WriteEndElement();
        }