jdk/src/share/classes/javax/management/relation/RoleUnresolved.java
changeset 2 90ce3da70b43
child 1510 e747d3193ef2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/management/relation/RoleUnresolved.java	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,358 @@
+/*
+ * Copyright 2000-2006 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package javax.management.relation;
+
+import static com.sun.jmx.mbeanserver.Util.cast;
+import com.sun.jmx.mbeanserver.GetPropertyAction;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamField;
+import java.io.Serializable;
+
+import java.security.AccessController;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.ObjectName;
+
+/**
+ * Represents an unresolved role: a role not retrieved from a relation due
+ * to a problem. It provides the role name, value (if problem when trying to
+ * set the role) and an integer defining the problem (constants defined in
+ * RoleStatus).
+ *
+ * <p>The <b>serialVersionUID</b> of this class is <code>-48350262537070138L</code>.
+ *
+ * @since 1.5
+ */
+@SuppressWarnings("serial")  // serialVersionUID not constant
+public class RoleUnresolved implements Serializable {
+
+    // Serialization compatibility stuff:
+    // Two serial forms are supported in this class. The selected form depends
+    // on system property "jmx.serial.form":
+    //  - "1.0" for JMX 1.0
+    //  - any other value for JMX 1.1 and higher
+    //
+    // Serial version for old serial form
+    private static final long oldSerialVersionUID = -9026457686611660144L;
+    //
+    // Serial version for new serial form
+    private static final long newSerialVersionUID = -48350262537070138L;
+    //
+    // Serializable fields in old serial form
+    private static final ObjectStreamField[] oldSerialPersistentFields =
+    {
+      new ObjectStreamField("myRoleName", String.class),
+      new ObjectStreamField("myRoleValue", ArrayList.class),
+      new ObjectStreamField("myPbType", int.class)
+    };
+    //
+    // Serializable fields in new serial form
+    private static final ObjectStreamField[] newSerialPersistentFields =
+    {
+      new ObjectStreamField("roleName", String.class),
+      new ObjectStreamField("roleValue", List.class),
+      new ObjectStreamField("problemType", int.class)
+    };
+    //
+    // Actual serial version and serial form
+    private static final long serialVersionUID;
+    /** @serialField roleName String Role name
+     *  @serialField roleValue List Role value ({@link List} of {@link ObjectName} objects)
+     *  @serialField problemType int Problem type
+     */
+    private static final ObjectStreamField[] serialPersistentFields;
+    private static boolean compat = false;
+    static {
+        try {
+            GetPropertyAction act = new GetPropertyAction("jmx.serial.form");
+            String form = AccessController.doPrivileged(act);
+            compat = (form != null && form.equals("1.0"));
+        } catch (Exception e) {
+            // OK : Too bad, no compat with 1.0
+        }
+        if (compat) {
+            serialPersistentFields = oldSerialPersistentFields;
+            serialVersionUID = oldSerialVersionUID;
+        } else {
+            serialPersistentFields = newSerialPersistentFields;
+            serialVersionUID = newSerialVersionUID;
+        }
+    }
+    //
+    // END Serialization compatibility stuff
+
+    //
+    // Private members
+    //
+
+    /**
+     * @serial Role name
+     */
+    private String roleName = null;
+
+    /**
+     * @serial Role value ({@link List} of {@link ObjectName} objects)
+     */
+    private List<ObjectName> roleValue = null;
+
+    /**
+     * @serial Problem type
+     */
+    private int problemType;
+
+    //
+    // Constructor
+    //
+
+    /**
+     * Constructor.
+     *
+     * @param name  name of the role
+     * @param value  value of the role (if problem when setting the
+     * role)
+     * @param pbType  type of problem (according to known problem types,
+     * listed as static final members).
+     *
+     * @exception IllegalArgumentException  if null parameter or incorrect
+     * problem type
+     */
+    public RoleUnresolved(String name,
+                          List<ObjectName> value,
+                          int pbType)
+        throws IllegalArgumentException {
+
+        if (name == null) {
+            String excMsg = "Invalid parameter.";
+            throw new IllegalArgumentException(excMsg);
+        }
+
+        setRoleName(name);
+        setRoleValue(value);
+        // Can throw IllegalArgumentException
+        setProblemType(pbType);
+        return;
+    }
+
+    //
+    // Accessors
+    //
+
+    /**
+     * Retrieves role name.
+     *
+     * @return the role name.
+     *
+     * @see #setRoleName
+     */
+    public String getRoleName() {
+        return roleName;
+    }
+
+    /**
+     * Retrieves role value.
+     *
+     * @return an ArrayList of ObjectName objects, the one provided to be set
+     * in given role. Null if the unresolved role is returned for a read
+     * access.
+     *
+     * @see #setRoleValue
+     */
+    public List<ObjectName> getRoleValue() {
+        return roleValue;
+    }
+
+    /**
+     * Retrieves problem type.
+     *
+     * @return an integer corresponding to a problem, those being described as
+     * static final members of current class.
+     *
+     * @see #setProblemType
+     */
+    public int getProblemType() {
+        return problemType;
+    }
+
+    /**
+     * Sets role name.
+     *
+     * @param name the new role name.
+     *
+     * @exception IllegalArgumentException  if null parameter
+     *
+     * @see #getRoleName
+     */
+    public void setRoleName(String name)
+        throws IllegalArgumentException {
+
+        if (name == null) {
+            String excMsg = "Invalid parameter.";
+            throw new IllegalArgumentException(excMsg);
+        }
+
+        roleName = name;
+        return;
+    }
+
+    /**
+     * Sets role value.
+     *
+     * @param value  List of ObjectName objects for referenced
+     * MBeans not set in role.
+     *
+     * @see #getRoleValue
+     */
+    public void setRoleValue(List<ObjectName> value) {
+
+        if (value != null) {
+            roleValue = new ArrayList<ObjectName>(value);
+        } else {
+            roleValue = null;
+        }
+        return;
+    }
+
+    /**
+     * Sets problem type.
+     *
+     * @param pbType  integer corresponding to a problem. Must be one of
+     * those described as static final members of current class.
+     *
+     * @exception IllegalArgumentException  if incorrect problem type
+     *
+     * @see #getProblemType
+     */
+    public void setProblemType(int pbType)
+        throws IllegalArgumentException {
+
+        if (!(RoleStatus.isRoleStatus(pbType))) {
+            String excMsg = "Incorrect problem type.";
+            throw new IllegalArgumentException(excMsg);
+        }
+        problemType = pbType;
+        return;
+    }
+
+    /**
+     * Clone this object.
+     *
+     * @return an independent clone.
+     */
+    public Object clone() {
+        try {
+            return new RoleUnresolved(roleName, roleValue, problemType);
+        } catch (IllegalArgumentException exc) {
+            return null; // :)
+        }
+    }
+
+    /**
+     * Return a string describing this object.
+     *
+     * @return a description of this RoleUnresolved object.
+     */
+    public String toString() {
+        StringBuilder result = new StringBuilder();
+        result.append("role name: " + roleName);
+        if (roleValue != null) {
+            result.append("; value: ");
+            for (Iterator objNameIter = roleValue.iterator();
+                 objNameIter.hasNext();) {
+                ObjectName currObjName = (ObjectName)(objNameIter.next());
+                result.append(currObjName.toString());
+                if (objNameIter.hasNext()) {
+                    result.append(", ");
+                }
+            }
+        }
+        result.append("; problem type: " + problemType);
+        return result.toString();
+    }
+
+    /**
+     * Deserializes a {@link RoleUnresolved} from an {@link ObjectInputStream}.
+     */
+    private void readObject(ObjectInputStream in)
+            throws IOException, ClassNotFoundException {
+      if (compat)
+      {
+        // Read an object serialized in the old serial form
+        //
+        ObjectInputStream.GetField fields = in.readFields();
+        roleName = (String) fields.get("myRoleName", null);
+        if (fields.defaulted("myRoleName"))
+        {
+          throw new NullPointerException("myRoleName");
+        }
+        roleValue = cast(fields.get("myRoleValue", null));
+        if (fields.defaulted("myRoleValue"))
+        {
+          throw new NullPointerException("myRoleValue");
+        }
+        problemType = fields.get("myPbType", 0);
+        if (fields.defaulted("myPbType"))
+        {
+          throw new NullPointerException("myPbType");
+        }
+      }
+      else
+      {
+        // Read an object serialized in the new serial form
+        //
+        in.defaultReadObject();
+      }
+    }
+
+
+    /**
+     * Serializes a {@link RoleUnresolved} to an {@link ObjectOutputStream}.
+     */
+    private void writeObject(ObjectOutputStream out)
+            throws IOException {
+      if (compat)
+      {
+        // Serializes this instance in the old serial form
+        //
+        ObjectOutputStream.PutField fields = out.putFields();
+        fields.put("myRoleName", roleName);
+        fields.put("myRoleValue", (ArrayList)roleValue);
+        fields.put("myPbType", problemType);
+        out.writeFields();
+      }
+      else
+      {
+        // Serializes this instance in the new serial form
+        //
+        out.defaultWriteObject();
+      }
+    }
+}