/*******************************************************************************
 * Copyright (C) 2007 The University of Manchester   
 * 
 *  Modifications to the initial code base are copyright of their
 *  respective authors, or their employers as appropriate.
 * 
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2.1 of
 *  the License, or (at your option) any later version.
 *    
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *    
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ******************************************************************************/
/**
 * 
 */
package net.sf.taverna.t2.workflowmodel.processor;

import org.apache.log4j.Logger;

import net.sf.taverna.t2.annotation.AbstractAnnotatedThing;
import net.sf.taverna.t2.invocation.WorkflowDataToken;
import net.sf.taverna.t2.workflowmodel.Datalink;
import net.sf.taverna.t2.workflowmodel.EventHandlingInputPort;
import net.sf.taverna.t2.workflowmodel.Port;

public class DiagnosticEventHandler extends AbstractAnnotatedThing<Port> implements EventHandlingInputPort {

	private static Logger logger = Logger.getLogger(DiagnosticEventHandler.class);
	
	protected int eventCount = 0;

	@Override
	public synchronized void receiveEvent(WorkflowDataToken token) {
		eventCount++;
		logger.debug(token);
	}

	public int getEventCount() {
		return this.eventCount;
	}

	public synchronized void reset() {
		this.eventCount = 0;
	}

	@Override
	public int getDepth() {
		return 0;
	}

	@Override
	public String getName() {
		return "Test port";
	}

	@Override
	public Datalink getIncomingLink() {
		// TODO Auto-generated method stub
		return null;
	}

}
