/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * */ package com.sun.solaris.service.pools; /** * The Value class represents a pools value. */ public class Value { private long _this; /** * Constructor. Only for use from native code. * @param pointer A pointer to a C value. */ private Value(long pointer) { _this = pointer; } /** * Constructor * @param name The name of the value. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name) throws PoolsException { if ((_this = PoolInternal.pool_value_alloc()) == 0) throw new PoolsException(); setName(name); } /** * Constructor * @param name The name of the value. * @param value The value of the value. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name, long value) throws PoolsException { this(name); setValue(value); } /** * Constructor * @param name The name of the value. * @param value The value of the value. * @param s Indicates if the value is signed or not. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name, long value, boolean s) throws PoolsException { this(name); setValue(value, s); } /** * Constructor * @param name The name of the value. * @param value The value of the value. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name, String value) throws PoolsException { this(name); setValue(value); } /** * Constructor * @param name The name of the value. * @param value The value of the value. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name, boolean value) throws PoolsException { this(name); setValue(value); } /** * Constructor * @param name The name of the value. * @param value The value of the value. * @throws PoolsException If there is an error whilst * allocating the value. */ public Value(String name, double value) throws PoolsException { this(name); setValue(value); } private boolean _locked = false; /** * Check whether the value is locked or not * @return returns the value of _locked */ public boolean islocked() throws PoolsException { return (_locked); } /** * Lock the value */ public void lock() throws PoolsException { _locked = true; } /** * Unlock the value */ public void unlock() throws PoolsException { _locked = false; } /** * Explicitly reclaim the memory (if not locked) * allocated for this value by the C proxy. */ public void close() { if (_locked == false) { if (_this != 0) { PoolInternal.pool_value_free(_this); _this = 0; } } } /** * Reclaim the memory allocated for this value by the C * proxy. * * @throws Throwable If freeing this configuration fails. */ protected void finalize() throws Throwable { try { unlock(); close(); } finally { super.finalize(); } } /** * Name this value. * * @param name The name to set for this value. */ public void setName(String name) { PoolInternal.pool_value_set_name(_this, name); } /** * Set this value to take the supplied signed long value. * * @param value The value to which this value should be set. */ public void setValue(long value) { PoolInternal.pool_value_set_int64(_this, value); } /** * Set this value to take the supplied long value. * * @param value The value to which this value should be set. * @param s Is the value signed or unsigned. */ public void setValue(long value, boolean s) { if (s) setValue(value); PoolInternal.pool_value_set_uint64(_this, value); } /** * Set this value to take the supplied string value. * * @param value The value to which this value should be set. * @throws PoolsExecption If the setting of the value fails. */ public void setValue(String value) throws PoolsException { if (PoolInternal.pool_value_set_string(_this, value) != PoolInternal.PO_SUCCESS) throw new PoolsException(); } /** * Set this value to take the supplied boolean value. * * @param value The value to which this value should be set. */ public void setValue(boolean value) { if (value == true) PoolInternal.pool_value_set_bool(_this, (short)1); else PoolInternal.pool_value_set_bool(_this, (short)0); } /** * Set this value to take the supplied double value. * * @param value The value to which this value should be set. */ public void setValue(double value) { PoolInternal.pool_value_set_double(_this, value); } /** * Returns the name of the value. * * @return the name of the value. */ public String getName() { return (PoolInternal.pool_value_get_name(_this)); } /** * Returns the pointer to the native value represented by this * object. * * @return the pointer to the native value represented by this * object. */ public long getValue() { return (_this); } /** * Returns the type of this object. * * @return the type of this object. */ public int getType() { return (PoolInternal.pool_value_get_type(_this)); } /** * Returns a string representation of this value. * * @return a string representation of this value. */ public String toString() { int type = PoolInternal.pool_value_get_type(_this); try { if (type == PoolInternal.POC_INT || type == PoolInternal.POC_UINT) return (String.valueOf(getLong())); if (type == PoolInternal.POC_STRING) return getString(); if (type == PoolInternal.POC_BOOL) return (String.valueOf(getBool())); if (type == PoolInternal.POC_DOUBLE) return (String.valueOf(getDouble())); } catch (PoolsException pe) { return pe.toString(); } return ""; /* Stop the compiler complaining */ } /** * Returns the value as a UnsignedInt64. * * @return the value as a UnsignedInt64. * @throws PoolsException if the value is not an * UnsignedInt64. */ public final UnsignedInt64 getUnsignedInt64() throws PoolsException { return (getUnsignedInt64Value(_this)); } /** * Returns the value as a long. * * @return the value as a long. * @throws PoolsException if the value is not a long. */ public final long getLong() throws PoolsException { return (getLongValue(_this)); } /** * Returns the value as a String. * * @return the value as a String. * @throws PoolsException if the value is not a String. */ public final String getString() throws PoolsException { return (getStringValue(_this)); } /** * Returns the value as a boolean. * * @return the value as a boolean. * @throws PoolsException if the value is not a boolean. */ public final boolean getBool() throws PoolsException { return (getBoolValue(_this)); } /** * Returns the value as a double. * * @return the value as a double. * @throws PoolsException if the value is not a double. */ public final double getDouble() throws PoolsException { return (getDoubleValue(_this)); } /** * Returns the value as a UnsignedInt64. * * @param pointer the native value to be accessed. * @return the value as a UnsignedInt64. */ private final static native UnsignedInt64 getUnsignedInt64Value( long pointer); /** * Returns the value as a long. * * @param pointer the native value to be accessed. * @return the value as a long. */ private final static native long getLongValue(long pointer); /** * Returns the value as a String. * * @param pointer the native value to be accessed. * @return the value as a String. */ private final static native String getStringValue(long pointer); /** * Returns the value as a boolean. * * @param pointer the native value to be accessed. * @return the value as a boolean. */ private final static native boolean getBoolValue(long pointer); /** * Returns the value as a double. * * @param pointer the native value to be accessed. * @return the value as a double. */ private final static native double getDoubleValue(long pointer); }