/*******************************************************************************
 * Copyright (c) 2000, 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdi.internal.event;

import java.io.DataInputStream;
import java.io.IOException;

import org.eclipse.jdi.internal.LocationImpl;
import org.eclipse.jdi.internal.MirrorImpl;
import org.eclipse.jdi.internal.ObjectReferenceImpl;
import org.eclipse.jdi.internal.ThreadReferenceImpl;
import org.eclipse.jdi.internal.VirtualMachineImpl;
import org.eclipse.jdi.internal.request.RequestID;

import com.sun.jdi.ObjectReference;
import com.sun.jdi.event.MonitorContendedEnteredEvent;

/**
 * This class provides an implementation of MonitorContendedEnteredEvent
 * according to Sun's 1.6 specs
 *
 * @since 3.3
 */
public class MonitorContendedEnteredEventImpl extends LocatableEventImpl
		implements MonitorContendedEnteredEvent {

	/** Jdwp Event Kind. */
	public static final byte EVENT_KIND = EVENT_MONITOR_CONTENDED_ENTERED;

	/** the monitor information **/
	private ObjectReference fMonitor;

	/** Constructor **/
	private MonitorContendedEnteredEventImpl(VirtualMachineImpl vmImpl,
			RequestID requestID) {
		super("MonitorContendedEntered", vmImpl, requestID); //$NON-NLS-1$
	}

	/**
	 * @return Creates, reads and returns new EventImpl, of which requestID has
	 *         already been read.
	 */
	public static MonitorContendedEnteredEventImpl read(MirrorImpl target,
			RequestID requestID, DataInputStream dataInStream)
			throws IOException {
		VirtualMachineImpl vmImpl = target.virtualMachineImpl();
		MonitorContendedEnteredEventImpl event = new MonitorContendedEnteredEventImpl(
				vmImpl, requestID);
		event.fThreadRef = ThreadReferenceImpl.read(target, dataInStream);
		event.fMonitor = ObjectReferenceImpl.readObjectRefWithTag(target,
				dataInStream);
		event.fLocation = LocationImpl.read(target, dataInStream);
		return event;
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see com.sun.jdi.event.MonitorContendedEnteredEvent#monitor()
	 */
	@Override
	public ObjectReference monitor() {
		return fMonitor;
	}
}
