Merge pull request #498 from Unroll-Me/master
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Description / MetadataImporter.cs
index 3e01c1bb68596c7fb611efd5fc78785d57b2f63e..2257936225f1b17a69dfd3e33df2fe51458a4593 100644 (file)
@@ -41,6 +41,7 @@ namespace System.ServiceModel.Description
        {
                KeyedByTypeCollection<IPolicyImportExtension> policy_extensions;
                Collection<MetadataConversionError> errors = new Collection<MetadataConversionError> ();
+               Dictionary<Object,Object> state = new Dictionary<Object, Object> ();
 
                internal MetadataImporter (IEnumerable<IPolicyImportExtension> policyImportExtensions)
                {
@@ -55,7 +56,6 @@ namespace System.ServiceModel.Description
                        policy_extensions.Add (new MessageEncodingBindingElementImporter ());
                }
 
-               [MonoTODO ("Not in use yet")]
                public Collection<MetadataConversionError> Errors {
                        get { return errors; }
                }
@@ -65,7 +65,7 @@ namespace System.ServiceModel.Description
                }
 
                public Dictionary<Object,Object> State {
-                       get { throw new NotImplementedException (); }
+                       get { return state; }
                }
 
                public Dictionary<XmlQualifiedName,ContractDescription> KnownContracts {
@@ -75,5 +75,50 @@ namespace System.ServiceModel.Description
                public abstract Collection<ContractDescription> ImportAllContracts ();
 
                public abstract ServiceEndpointCollection ImportAllEndpoints ();
+
+               internal T GetState<T> () where T : class, new ()
+               {
+                       object value;
+                       if (!state.TryGetValue (typeof(T), out value)) {
+                               value = new T ();
+                               state.Add (typeof(T), value);
+                       }
+                       return (T) value;
+               }
+
+               internal MetadataConversionError AddError (string message, params object[] args)
+               {
+                       var error = new MetadataConversionError (string.Format (message, args));
+                       Errors.Add (error);
+                       return error;
+               }
+               
+               internal MetadataConversionError AddWarning (string message, params object[] args)
+               {
+                       var error = new MetadataConversionError (string.Format (message, args), true);
+                       Errors.Add (error);
+                       return error;
+               }
+               
+               internal class MetadataImportException : Exception
+               {
+                       public MetadataConversionError Error {
+                               get;
+                               private set;
+                       }
+                       
+                       public MetadataImportException (MetadataConversionError error)
+                               : base (error.Message)
+                       {
+                               this.Error = error;
+                       }
+                       
+                       public MetadataImportException (MetadataConversionError error, Exception inner)
+                               : base (error.Message, inner)
+                       {
+                               this.Error = error;
+                       }
+               }
+
        }
 }