/// <summary> /// Create instances of SampleClassificationObjectType, adding them to the private objects collection. /// </summary> /// <param name="entry"></param> private void ProcessResourceEntry(SampleResourceEntry entry) { // Create Property provider by matching property adapters with data sources // PropertyProvider is called by ResourceStaticAnalysis when code attempts to retrieve a property that has not yet been created var pp = new PropertyProvider(); // Add a pair: property adapter and an object that serves as source foreach (var adapter in resourceFilePropertyAdapters) { pp.AddPropertyAdapterDataSourcePair(adapter, entry); } // Initialize an instance of SampleClassificationObjectType using the PropertyProvider built above var obj = new SampleClassificationObjectType(pp); foreach (var adapter in selfPropertyAdapters) { // Now, add one more poperty adapter that uses the SampleClassificationObjectType object itself as data source // this one builds properties from existing properties. pp.AddPropertyAdapterDataSourcePair(adapter, obj); } // This reduces amount of memory used by object by compacting internal representation. pp.Compact(); // Add to the list of all objects being constructed by this adapter. objects.Add(obj); }
private static Property GetProperty(SampleClassificationObjectType.SupportedProperties propertyId, SampleResourceEntry resourceEntry) { if (resourceEntry == null) { throw new PropertyRetrievalException(String.Format(CultureInfo.CurrentCulture, "DataSource must not be null. DataSource name: {0}", resourceEntry.GetType().Name)); } try { switch (propertyId) { case SampleClassificationObjectType.SupportedProperties.Comments: return(new StringProperty((byte)propertyId, resourceEntry.Comments)); case SampleClassificationObjectType.SupportedProperties.ResourceId: return(new StringProperty((byte)propertyId, resourceEntry.ResourceId)); case SampleClassificationObjectType.SupportedProperties.SourceString: return(new StringProperty((byte)propertyId, resourceEntry.Value)); default: { string message = String.Format(CultureInfo.CurrentCulture, "Cannot provide property {0} from datasource of type {1}.", propertyId.ToString(), resourceEntry.GetType().Name); throw new InvalidOperationException(message); } } } catch (NullReferenceException e) { return(null); } }