Merge pull request #487 from mayerwin/patch-1
[mono.git] / mcs / class / System.ServiceModel / System.ServiceModel.Description / MetadataImporter.cs
index 6938b8f28b5460d9d756f583eb29186522298c7a..2257936225f1b17a69dfd3e33df2fe51458a4593 100644 (file)
@@ -40,6 +40,8 @@ namespace System.ServiceModel.Description
        public abstract class MetadataImporter
        {
                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 +57,7 @@ namespace System.ServiceModel.Description
                }
 
                public Collection<MetadataConversionError> Errors {
-                       get { throw new NotImplementedException (); }
+                       get { return errors; }
                }
 
                public KeyedByTypeCollection<IPolicyImportExtension> PolicyImportExtensions {
@@ -63,7 +65,7 @@ namespace System.ServiceModel.Description
                }
 
                public Dictionary<Object,Object> State {
-                       get { throw new NotImplementedException (); }
+                       get { return state; }
                }
 
                public Dictionary<XmlQualifiedName,ContractDescription> KnownContracts {
@@ -73,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;
+                       }
+               }
+
        }
 }