| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package sun.management;  | 
 | 
 | 
 | 
import javax.management.openmbean.CompositeType;  | 
 | 
import javax.management.openmbean.CompositeData;  | 
 | 
import javax.management.openmbean.CompositeDataSupport;  | 
 | 
import javax.management.openmbean.OpenDataException;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class StackTraceElementCompositeData extends LazyCompositeData { | 
 | 
    private final StackTraceElement ste;  | 
 | 
 | 
 | 
    private StackTraceElementCompositeData(StackTraceElement ste) { | 
 | 
        this.ste = ste;  | 
 | 
    }  | 
 | 
 | 
 | 
    public StackTraceElement getStackTraceElement() { | 
 | 
        return ste;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static StackTraceElement from(CompositeData cd) { | 
 | 
        validateCompositeData(cd);  | 
 | 
 | 
 | 
        return new StackTraceElement(getString(cd, CLASS_NAME),  | 
 | 
                                     getString(cd, METHOD_NAME),  | 
 | 
                                     getString(cd, FILE_NAME),  | 
 | 
                                     getInt(cd, LINE_NUMBER));  | 
 | 
    }  | 
 | 
 | 
 | 
    public static CompositeData toCompositeData(StackTraceElement ste) { | 
 | 
        StackTraceElementCompositeData cd = new StackTraceElementCompositeData(ste);  | 
 | 
        return cd.getCompositeData();  | 
 | 
    }  | 
 | 
 | 
 | 
    protected CompositeData getCompositeData() { | 
 | 
        // CONTENTS OF THIS ARRAY MUST BE SYNCHRONIZED WITH  | 
 | 
          | 
 | 
        final Object[] stackTraceElementItemValues = { | 
 | 
            ste.getClassName(),  | 
 | 
            ste.getMethodName(),  | 
 | 
            ste.getFileName(),  | 
 | 
            new Integer(ste.getLineNumber()),  | 
 | 
            new Boolean(ste.isNativeMethod()),  | 
 | 
        };  | 
 | 
        try { | 
 | 
            return new CompositeDataSupport(stackTraceElementCompositeType,  | 
 | 
                                            stackTraceElementItemNames,  | 
 | 
                                            stackTraceElementItemValues);  | 
 | 
        } catch (OpenDataException e) { | 
 | 
              | 
 | 
            throw new AssertionError(e);  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    private static final CompositeType stackTraceElementCompositeType;  | 
 | 
    static { | 
 | 
        try { | 
 | 
            stackTraceElementCompositeType = (CompositeType)  | 
 | 
                MappedMXBeanType.toOpenType(StackTraceElement.class);  | 
 | 
        } catch (OpenDataException e) { | 
 | 
              | 
 | 
            throw new AssertionError(e);  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
    private static final String CLASS_NAME      = "className";  | 
 | 
    private static final String METHOD_NAME     = "methodName";  | 
 | 
    private static final String FILE_NAME       = "fileName";  | 
 | 
    private static final String LINE_NUMBER     = "lineNumber";  | 
 | 
    private static final String NATIVE_METHOD   = "nativeMethod";  | 
 | 
 | 
 | 
    private static final String[] stackTraceElementItemNames = { | 
 | 
        CLASS_NAME,  | 
 | 
        METHOD_NAME,  | 
 | 
        FILE_NAME,  | 
 | 
        LINE_NUMBER,  | 
 | 
        NATIVE_METHOD,  | 
 | 
    };  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public static void validateCompositeData(CompositeData cd) { | 
 | 
        if (cd == null) { | 
 | 
            throw new NullPointerException("Null CompositeData"); | 
 | 
        }  | 
 | 
 | 
 | 
        if (!isTypeMatched(stackTraceElementCompositeType, cd.getCompositeType())) { | 
 | 
            throw new IllegalArgumentException(  | 
 | 
                "Unexpected composite type for StackTraceElement");  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    private static final long serialVersionUID = -2704607706598396827L;  | 
 | 
}  |