internal TObject Register(Importer.XmlReader reader, XName xname, TXObject xobj, TObject obj, bool allowReverse = true) { TObject oldObject = null; if (this.objectsByName.TryGetValue(xname, out oldObject)) { TXObject oldElem = this.elementsByObject[oldObject]; this.importer.AddError("The " + this.name + " '" + xname + "' is already imported from '" + oldElem.BaseUri + "' at '" + SoalImporter.GetLinePositionSpan(oldElem) + "'.", reader.Uri, SoalImporter.GetLinePositionSpan(xobj)); return(null); } if (this.objectsByElement.TryGetValue(xobj, out oldObject)) { TXObject oldElem = this.elementsByObject[oldObject]; this.importer.AddError("The " + this.name + " '" + xname + "' has already an object assigned to it.", reader.Uri, SoalImporter.GetLinePositionSpan(xobj)); return(null); } TXObject oldXObject = null; if (this.elementsByName.TryGetValue(xname, out oldXObject)) { this.importer.AddError("The " + this.name + " '" + xname + "' is already registered to '" + oldXObject.BaseUri + "' at '" + SoalImporter.GetLinePositionSpan(oldXObject) + "'.", reader.Uri, SoalImporter.GetLinePositionSpan(xobj)); return(null); } this.objectsByName.Add(xname, obj); this.objectsByElement.Add(xobj, obj); this.elementsByName.Add(xname, xobj); if (allowReverse) { if (this.elementsByObject.TryGetValue(obj, out oldXObject)) { this.importer.AddError("The object is alredy registered to " + this.name + " in '" + oldXObject.BaseUri + "' at '" + SoalImporter.GetLinePositionSpan(oldXObject) + "'.", reader.Uri, SoalImporter.GetLinePositionSpan(xobj)); return(null); } if (!this.elementsByObject.ContainsKey(obj)) { this.elementsByObject.Add(obj, xobj); } } return(obj); }
private void CheckXsdTypes() { var types = this.Model.Symbols.OfType <StructBuilder>().ToList(); foreach (var type in types) { foreach (var prop in type.Properties) { if (prop.Type == null || prop.Type.GetCoreType() == null) { XElement elem = this.XsdTypes.GetX(type); string uri = ""; if (elem != null) { uri = elem.BaseUri; } this.AddError("The property '" + type.Name + "." + prop.Name + "' has no type.", uri, SoalImporter.GetLinePositionSpan(elem)); } else { SoalTypeBuilder originalType = null; if (this.originalTypes.TryGetValue((ISymbol)prop, out originalType)) { if (originalType is AnnotatedElementBuilder && ((AnnotatedElementBuilder)originalType).HasAnnotation(SoalAnnotations.Restriction)) { SoalImporter.CopyAnnotation(SoalAnnotations.Restriction, ((AnnotatedElementBuilder)originalType), prop); } if (originalType is StructBuilder) { object wrapped = ((StructBuilder)originalType).GetAnnotationPropertyValue(SoalAnnotations.Type, SoalAnnotationProperties.Wrapped) ?? false; if ((bool)wrapped) { SoalImporter.CopyAnnotationProperty(SoalAnnotations.Type, SoalAnnotationProperties.Wrapped, ((AnnotatedElementBuilder)originalType), SoalAnnotations.Element, SoalAnnotationProperties.Wrapped, prop); SoalImporter.CopyAnnotationProperty(SoalAnnotations.Type, SoalAnnotationProperties.Items, ((AnnotatedElementBuilder)originalType), SoalAnnotations.Element, SoalAnnotationProperties.Items, prop); SoalImporter.CopyAnnotationProperty(SoalAnnotations.Type, SoalAnnotationProperties.Sap, ((AnnotatedElementBuilder)originalType), SoalAnnotations.Element, SoalAnnotationProperties.Sap, prop); } } } } } } }