private void ConvertFullRecordField(Types.AbstractRecord fullRecord, IRecord record, Filter.XPathTypeNavigator navigator) { var r=fullRecord as Types.Record; if (navigator.LocalName=="BoundingBox") { object value=navigator.GetValue(record); if (value==null) return; // Covariance is a feature of .NET 4.0 http://msdn.microsoft.com/en-us/library/dd233059.aspx var ensg=value as IEnumerable<ISimpleGeometry>; if (ensg==null) { var geom=value as ISimpleGeometry; if (geom!=null) ensg=new ISimpleGeometry[] { geom }; } foreach (ISimpleGeometry g in ensg) { try { var box=new Ows100.BoundingBox(); box.InitFromGeometry(g); r.BoundingBox.Add(box); } catch (Exception ex) { try { Logger.Error(CultureInfo.InvariantCulture, m => m("Exception {0} occured while creating bounding box for geometry \"{1}\". Message: \"{2}\".", ex.GetType(), g, ex.Message)); } catch (Exception eex) { Logger.Error(CultureInfo.InvariantCulture, m => m("Exception {0} occured while logging exception {1}. Message: \"{2}\".", eex.GetType(), ex.GetType(), eex.Message)); } } } return; } IList<DC11.DCelement> elements=CreateRecordField(record, navigator); foreach (DC11.DCelement e in elements) r.Content.DCelement.Add(e); }
private void ConvertBriefRecordField(Types.AbstractRecord briefRecord, IRecord record, Filter.XPathTypeNavigator navigator) { var r=briefRecord as Types.BriefRecord; IList<DC11.DCelement> elements=CreateRecordField(record, navigator); if (elements.Count==0) return; switch (navigator.LocalName) { case "identifier": r.identifier=elements.Cast<DC11.identifier>().ToList<DC11.identifier>(); break; case "title": r.title=elements.Cast<DC11.title>().ToList<DC11.title>(); break; case "type": r.type=(DC11.type)elements[0]; break; } }
private void ConvertSummaryRecordField(Types.AbstractRecord summaryRecord, IRecord record, Filter.XPathTypeNavigator navigator) { var r=summaryRecord as Types.SummaryRecord; IList<DC11.DCelement> elements=CreateRecordField(record, navigator); if (elements.Count==0) return; switch (navigator.LocalName) { case "abstract": r.@abstract=elements.Cast<DCTerms.@abstract>().ToList<DCTerms.@abstract>(); break; case "format": r.format=elements.Cast<DC11.format>().ToList<DC11.format>(); break; case "identifier": r.identifier=elements.Cast<DC11.identifier>().ToList<DC11.identifier>(); break; case "modified": r.modified=elements.Cast<DCTerms.modified>().ToList<DCTerms.modified>(); break; case "relation": r.relation=elements.Cast<DC11.relation>().ToList<DC11.relation>(); break; case "spatial": r.spatial=elements.Cast<DCTerms.spatial>().ToList<DCTerms.spatial>(); break; case "subject": r.subject=elements.Cast<DC11.subject>().ToList<DC11.subject>(); break; case "title": r.title=elements.Cast<DC11.title>().ToList<DC11.title>(); break; case "type": r.type=(DC11.type)elements[0]; break; } }
protected virtual IList<DC11.DCelement> CreateRecordField(IRecord record, Filter.XPathTypeNavigator navigator) { var ret=new List<DC11.DCelement>(); object value=navigator.GetValue(record); if (value==null) return ret; if ((value is string) || !(value is IEnumerable)) value=new object[] { value }; foreach (object v in (IEnumerable)value) { DC11.DCelement e=null; switch (navigator.LocalName) { case "abstract": e=new DCTerms.@abstract(); break; case "created": e=new DCTerms.created(); break; case "creator": e=new DC11.creator(); break; case "contributor": e=new DC11.contributor(); break; case "date": e=new DC11.date(); break; case "description": e=new DC11.description(); break; case "format": e=new DC11.format(); break; case "identifier": e=new DC11.identifier(); break; case "language": e=new DC11.language(); break; case "modified": e=new DCTerms.modified(); break; case "publisher": e=new DC11.publisher(); break; case "relation": e=new DC11.relation(); break; case "rights": e=new DC11.rights(); break; case "source": e=new DC11.source(); break; case "spatial": e=new DCTerms.spatial(); break; case "subject": e=new DC11.subject(); break; case "title": e=new DC11.title(); break; case "type": e=new DC11.type(); break; case "valid": e=new DCTerms.valid(); break; } if (e!=null) { if (navigator.MoveToAttribute("scheme", string.Empty)) { object sch=navigator.GetValue(record); if (sch!=null) e.scheme=new Uri(sch.ToString()); } e.Untyped.Add(v); ret.Add(e); } } return ret; }