TARGET_J2EE/JVM fixes
[mono.git] / mcs / class / corlib / System.Security / NamedPermissionSet.cs
index 6c2a163ccb1b2b8e20284ca826ef7f2ad0e2a946..d2c3d71b01afe032ce15c956646d81a39198df4c 100644 (file)
@@ -3,14 +3,11 @@
 //
 // Authors:
 //     Dan Lewis (dihlewis@yahoo.co.uk)
-//     Sebastien Pouliot (spouliot@motus.com)
+//     Sebastien Pouliot  <sebastien@ximian.com>
 //
 // (C) 2002
 // Portions (C) 2003, 2004 Motus Technologies Inc. (http://www.motus.com)
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-// 
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
+using System.Runtime.InteropServices;
 using System.Security.Permissions;
 
 namespace System.Security {
-       
+
+#if NET_2_0
+       [ComVisible (true)]
+#endif
        [Serializable]
        public sealed class NamedPermissionSet : PermissionSet {
 
+               private string name;
+               private string description;
+
                // for PolicyLevel (to avoid validation duplication)
-               internal NamedPermissionSet () : base () {}
+               internal NamedPermissionSet ()
+                       : base ()
+               {
+               }
 
-               public NamedPermissionSet (string name, PermissionSet set) : base (set) 
+               public NamedPermissionSet (string name, PermissionSet set) 
+                       : base (set) 
                {
                        Name = name;
                }
 
-               public NamedPermissionSet (string name, PermissionState state) : base (state) 
+               public NamedPermissionSet (string name, PermissionState state) 
+                       : base (state) 
                {
                        Name = name;
                }
 
-               public NamedPermissionSet (NamedPermissionSet set) : this (set.name, set) {}
+               public NamedPermissionSet (NamedPermissionSet set) 
+                       : base (set)
+               {
+                       name = set.name; // name can be null here
+                       description = set.description;
+               }
 
-               public NamedPermissionSet (string name) : this (name, PermissionState.None) {}
+               public NamedPermissionSet (string name) 
+                       : this (name, PermissionState.Unrestricted)
+               {
+               }
 
                // properties
 
@@ -90,12 +83,15 @@ namespace System.Security {
                public string Name {
                        get { return name; }
                        set { 
-                               if ((value == null) || (value == String.Empty)) 
-                                       throw new ArgumentException ("invalid name");
+                               if ((value == null) || (value == String.Empty)) {
+                                       throw new ArgumentException (Locale.GetText ("invalid name"));
+                               }
                                name = value; 
                        }
                }
 
+               // methods
+
                public override PermissionSet Copy () 
                {
                        return new NamedPermissionSet (this);
@@ -104,15 +100,16 @@ namespace System.Security {
                public NamedPermissionSet Copy (string name) 
                {
                        NamedPermissionSet nps = new NamedPermissionSet (this);
-                       nps.Name = name;
+                       nps.Name = name;                // get the new name
                        return nps;
                }
 
                public override void FromXml (SecurityElement e) 
                {
-                       FromXml (e, "NamedPermissionSet");
-                       Name = (e.Attributes ["Name"] as string);
-                       description = (e.Attributes ["Description"] as string);
+                       base.FromXml (e);
+                       // strangely it can import a null Name (bypassing property setter)
+                       name = e.Attribute ("Name");
+                       description = e.Attribute ("Description");
                        if (description == null)
                                description = String.Empty;
                }
@@ -127,9 +124,29 @@ namespace System.Security {
                        return se;
                }
 
-               // private
+#if NET_2_0
+               [ComVisible (false)]
+               public override bool Equals (object obj)
+               {
+                       if (obj == null)
+                               return false;
+                       NamedPermissionSet nps = (obj as NamedPermissionSet);
+                       if (nps == null)
+                               return false;
+                       // description isn't part of the comparaison
+                       return ((name == nps.Name) && base.Equals (obj));
+               }
 
-               private string name;
-               private string description;
+               [ComVisible (false)]
+               public override int GetHashCode ()
+               {
+                       int hc = base.GetHashCode ();
+                       // name is part of the hash code (except when null)
+                       if (name != null)
+                               hc ^= name.GetHashCode ();
+                       // description is never part of the hash code
+                       return hc;
+               }
+#endif
        }
 }