| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package javax.management;  | 
 | 
 | 
 | 
 | 
 | 
import com.sun.jmx.mbeanserver.GetPropertyAction;  | 
 | 
 | 
 | 
import java.io.IOException;  | 
 | 
import java.io.ObjectInputStream;  | 
 | 
import java.io.ObjectOutputStream;  | 
 | 
import java.io.ObjectStreamField;  | 
 | 
 | 
 | 
import java.security.AccessController;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
@SuppressWarnings("serial")   | 
 | 
class NumericValueExp extends QueryEval implements ValueExp { | 
 | 
 | 
 | 
    // 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  | 
 | 
    //  | 
 | 
      | 
 | 
    private static final long oldSerialVersionUID = -6227876276058904000L;  | 
 | 
    //  | 
 | 
      | 
 | 
    private static final long newSerialVersionUID = -4679739485102359104L;  | 
 | 
    //  | 
 | 
      | 
 | 
    private static final ObjectStreamField[] oldSerialPersistentFields =  | 
 | 
    { | 
 | 
        new ObjectStreamField("longVal", Long.TYPE), | 
 | 
        new ObjectStreamField("doubleVal", Double.TYPE), | 
 | 
        new ObjectStreamField("valIsLong", Boolean.TYPE) | 
 | 
    };  | 
 | 
    //  | 
 | 
      | 
 | 
    private static final ObjectStreamField[] newSerialPersistentFields =  | 
 | 
    { | 
 | 
        new ObjectStreamField("val", Number.class) | 
 | 
    };  | 
 | 
    //  | 
 | 
      | 
 | 
    private static final long serialVersionUID;  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    private static final ObjectStreamField[] serialPersistentFields;  | 
 | 
    private Number val = 0.0;  | 
 | 
 | 
 | 
    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: exception means no compat with 1.0, too bad  | 
 | 
        }  | 
 | 
        if (compat) { | 
 | 
            serialPersistentFields = oldSerialPersistentFields;  | 
 | 
            serialVersionUID = oldSerialVersionUID;  | 
 | 
        } else { | 
 | 
            serialPersistentFields = newSerialPersistentFields;  | 
 | 
            serialVersionUID = newSerialVersionUID;  | 
 | 
        }  | 
 | 
    }  | 
 | 
    //  | 
 | 
    // END Serialization compatibility stuff  | 
 | 
 | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public NumericValueExp() { | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
    NumericValueExp(Number val)  | 
 | 
    { | 
 | 
      this.val = val;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public double doubleValue()  { | 
 | 
      if (val instanceof Long || val instanceof Integer)  | 
 | 
      { | 
 | 
        return (double)(val.longValue());  | 
 | 
      }  | 
 | 
      return val.doubleValue();  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public long longValue()  { | 
 | 
      if (val instanceof Long || val instanceof Integer)  | 
 | 
      { | 
 | 
        return val.longValue();  | 
 | 
      }  | 
 | 
      return (long)(val.doubleValue());  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public boolean isLong()  { | 
 | 
        return (val instanceof Long || val instanceof Integer);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    public String toString()  { | 
 | 
      if (val == null)  | 
 | 
        return "null";  | 
 | 
      if (val instanceof Long || val instanceof Integer)  | 
 | 
      { | 
 | 
        return Long.toString(val.longValue());  | 
 | 
      }  | 
 | 
      double d = val.doubleValue();  | 
 | 
      if (Double.isInfinite(d))  | 
 | 
          return (d > 0) ? "(1.0 / 0.0)" : "(-1.0 / 0.0)";  | 
 | 
      if (Double.isNaN(d))  | 
 | 
          return "(0.0 / 0.0)";  | 
 | 
      return Double.toString(d);  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public ValueExp apply(ObjectName name)  | 
 | 
            throws BadStringOperationException, BadBinaryOpValueExpException,  | 
 | 
                   BadAttributeValueExpException, InvalidApplicationException { | 
 | 
        return this;  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    private void readObject(ObjectInputStream in)  | 
 | 
            throws IOException, ClassNotFoundException { | 
 | 
      if (compat)  | 
 | 
      { | 
 | 
        // Read an object serialized in the old serial form  | 
 | 
          | 
 | 
        double doubleVal;  | 
 | 
        long longVal;  | 
 | 
        boolean isLong;  | 
 | 
        ObjectInputStream.GetField fields = in.readFields();  | 
 | 
        doubleVal = fields.get("doubleVal", (double)0); | 
 | 
        if (fields.defaulted("doubleVal")) | 
 | 
        { | 
 | 
          throw new NullPointerException("doubleVal"); | 
 | 
        }  | 
 | 
        longVal = fields.get("longVal", (long)0); | 
 | 
        if (fields.defaulted("longVal")) | 
 | 
        { | 
 | 
          throw new NullPointerException("longVal"); | 
 | 
        }  | 
 | 
        isLong = fields.get("valIsLong", false); | 
 | 
        if (fields.defaulted("valIsLong")) | 
 | 
        { | 
 | 
          throw new NullPointerException("valIsLong"); | 
 | 
        }  | 
 | 
        if (isLong)  | 
 | 
        { | 
 | 
          this.val = longVal;  | 
 | 
        }  | 
 | 
        else  | 
 | 
        { | 
 | 
          this.val = doubleVal;  | 
 | 
        }  | 
 | 
      }  | 
 | 
      else  | 
 | 
      { | 
 | 
        // Read an object serialized in the new serial form  | 
 | 
          | 
 | 
        in.defaultReadObject();  | 
 | 
      }  | 
 | 
    }  | 
 | 
 | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
     */  | 
 | 
    private void writeObject(ObjectOutputStream out)  | 
 | 
            throws IOException { | 
 | 
      if (compat)  | 
 | 
      { | 
 | 
        // Serializes this instance in the old serial form  | 
 | 
          | 
 | 
        ObjectOutputStream.PutField fields = out.putFields();  | 
 | 
        fields.put("doubleVal", doubleValue()); | 
 | 
        fields.put("longVal", longValue()); | 
 | 
        fields.put("valIsLong", isLong()); | 
 | 
        out.writeFields();  | 
 | 
      }  | 
 | 
      else  | 
 | 
      { | 
 | 
        // Serializes this instance in the new serial form  | 
 | 
          | 
 | 
        out.defaultWriteObject();  | 
 | 
      }  | 
 | 
    }  | 
 | 
 | 
 | 
    @Deprecated  | 
 | 
    public void setMBeanServer(MBeanServer s) { | 
 | 
        super.setMBeanServer(s);  | 
 | 
    }  | 
 | 
 | 
 | 
 }  |