1fb3fb4f3Stomee /*
2fb3fb4f3Stomee  * CDDL HEADER START
3fb3fb4f3Stomee  *
4fb3fb4f3Stomee  * The contents of this file are subject to the terms of the
5fb3fb4f3Stomee  * Common Development and Distribution License (the "License").
6fb3fb4f3Stomee  * You may not use this file except in compliance with the License.
7fb3fb4f3Stomee  *
8fb3fb4f3Stomee  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fb3fb4f3Stomee  * or http://www.opensolaris.org/os/licensing.
10fb3fb4f3Stomee  * See the License for the specific language governing permissions
11fb3fb4f3Stomee  * and limitations under the License.
12fb3fb4f3Stomee  *
13fb3fb4f3Stomee  * When distributing Covered Code, include this CDDL HEADER in each
14fb3fb4f3Stomee  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fb3fb4f3Stomee  * If applicable, add the following below this CDDL HEADER, with the
16fb3fb4f3Stomee  * fields enclosed by brackets "[]" replaced with your own identifying
17fb3fb4f3Stomee  * information: Portions Copyright [yyyy] [name of copyright owner]
18fb3fb4f3Stomee  *
19fb3fb4f3Stomee  * CDDL HEADER END
20fb3fb4f3Stomee  */
21fb3fb4f3Stomee 
22fb3fb4f3Stomee /*
2391cfa10aStomee  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24fb3fb4f3Stomee  * Use is subject to license terms.
25fb3fb4f3Stomee  *
26fb3fb4f3Stomee  * ident	"%Z%%M%	%I%	%E% SMI"
27fb3fb4f3Stomee  */
28fb3fb4f3Stomee package org.opensolaris.os.dtrace;
29fb3fb4f3Stomee 
30fb3fb4f3Stomee import java.io.*;
31fb3fb4f3Stomee import java.util.EventObject;
32fb3fb4f3Stomee 
33fb3fb4f3Stomee /**
34fb3fb4f3Stomee  * Notification that the state of a target process designated by {@link
35fb3fb4f3Stomee  * Consumer#createProcess(String command)} or {@link
36fb3fb4f3Stomee  * Consumer#grabProcess(int pid)} has changed.
37fb3fb4f3Stomee  *
38fb3fb4f3Stomee  * @see ConsumerListener#processStateChanged(ProcessEvent e)
39fb3fb4f3Stomee  *
40fb3fb4f3Stomee  * @author Tom Erickson
41fb3fb4f3Stomee  */
42fb3fb4f3Stomee public class ProcessEvent extends EventObject {
43fb3fb4f3Stomee     static final long serialVersionUID = -3779443761929558702L;
44fb3fb4f3Stomee 
45fb3fb4f3Stomee     /** @serial */
46fb3fb4f3Stomee     private ProcessState processState;
47fb3fb4f3Stomee 
48fb3fb4f3Stomee     /**
49fb3fb4f3Stomee      * Creates a {@link ConsumerListener#processStateChanged(ProcessEvent e)
50fb3fb4f3Stomee      * processStateChanged()} event to notify listeners of a process
51fb3fb4f3Stomee      * state change.
52fb3fb4f3Stomee      *
53fb3fb4f3Stomee      * @param source the {@link Consumer} that is the source of this event
54fb3fb4f3Stomee      * @throws NullPointerException if the given process state is {@code
55fb3fb4f3Stomee      * null}
56fb3fb4f3Stomee      */
57fb3fb4f3Stomee     public
ProcessEvent(Object source, ProcessState p)58fb3fb4f3Stomee     ProcessEvent(Object source, ProcessState p)
59fb3fb4f3Stomee     {
60fb3fb4f3Stomee 	super(source);
61fb3fb4f3Stomee 	processState = p;
62fb3fb4f3Stomee 	validate();
63fb3fb4f3Stomee     }
64fb3fb4f3Stomee 
6591cfa10aStomee     private final void
validate()66fb3fb4f3Stomee     validate()
67fb3fb4f3Stomee     {
68fb3fb4f3Stomee 	if (processState == null) {
69fb3fb4f3Stomee 	    throw new NullPointerException("process state is null");
70fb3fb4f3Stomee 	}
71fb3fb4f3Stomee     }
72fb3fb4f3Stomee 
73fb3fb4f3Stomee     /**
74fb3fb4f3Stomee      * Gets the process state.
75fb3fb4f3Stomee      *
76fb3fb4f3Stomee      * @return non-null process state
77fb3fb4f3Stomee      */
78fb3fb4f3Stomee     public ProcessState
getProcessState()79fb3fb4f3Stomee     getProcessState()
80fb3fb4f3Stomee     {
81fb3fb4f3Stomee 	return processState;
82fb3fb4f3Stomee     }
83fb3fb4f3Stomee 
84fb3fb4f3Stomee     private void
readObject(ObjectInputStream s)85fb3fb4f3Stomee     readObject(ObjectInputStream s)
86fb3fb4f3Stomee             throws IOException, ClassNotFoundException
87fb3fb4f3Stomee     {
88fb3fb4f3Stomee 	s.defaultReadObject();
89fb3fb4f3Stomee 	// check invariants
90fb3fb4f3Stomee 	try {
91fb3fb4f3Stomee 	    validate();
92fb3fb4f3Stomee 	} catch (Exception e) {
93*4ae67516Stomee 	    InvalidObjectException x = new InvalidObjectException(
94*4ae67516Stomee 		    e.getMessage());
95*4ae67516Stomee 	    x.initCause(e);
96*4ae67516Stomee 	    throw x;
97fb3fb4f3Stomee 	}
98fb3fb4f3Stomee     }
99fb3fb4f3Stomee 
100fb3fb4f3Stomee     /**
101fb3fb4f3Stomee      * Gets a string representation of this event useful for logging and
102fb3fb4f3Stomee      * not intended for display.  The exact details of the
103fb3fb4f3Stomee      * representation are unspecified and subject to change, but the
104fb3fb4f3Stomee      * following format may be regarded as typical:
105fb3fb4f3Stomee      * <pre><code>
106fb3fb4f3Stomee      * class-name[property1 = value1, property2 = value2]
107fb3fb4f3Stomee      * </code></pre>
108fb3fb4f3Stomee      */
109fb3fb4f3Stomee     public String
toString()110fb3fb4f3Stomee     toString()
111fb3fb4f3Stomee     {
112*4ae67516Stomee 	StringBuilder buf = new StringBuilder();
113fb3fb4f3Stomee 	buf.append(ProcessEvent.class.getName());
114fb3fb4f3Stomee 	buf.append("[source = ");
115fb3fb4f3Stomee 	buf.append(getSource());
116fb3fb4f3Stomee 	buf.append(", processState = ");
117fb3fb4f3Stomee 	buf.append(processState);
118fb3fb4f3Stomee 	buf.append(']');
119fb3fb4f3Stomee 	return buf.toString();
120fb3fb4f3Stomee     }
121fb3fb4f3Stomee }
122