/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.core.utils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.jubula.client.core.i18n.Messages;
import org.eclipse.jubula.client.core.model.IEventExecTestCasePO;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.model.ITestSuitePO;
import org.eclipse.jubula.client.core.model.NodeMaker;
import org.eclipse.jubula.client.core.model.ReentryProperty;
import org.eclipse.jubula.tools.internal.exception.InvalidDataException;
/**
*
* class to manage the defaultEventHandler
* They will called, if no userdefined eventHandler is available
*
* @author BREDEX GmbH
* @created 07.04.2005
*
*/
public final class DefaultEventHandler {
/**
* <code>handlerMap</code><br>
* Map with defaultEventHandler for each eventType (key)
*/
private static Map<String, IEventExecTestCasePO> handlerMap =
new HashMap<String, IEventExecTestCasePO>();
/**
* private constructor
*/
private DefaultEventHandler() {
// nothing
}
/**
* get the DefaultEventHandler for given eventType <br>
* if no eventHandler is available for given eventType will return a
* standard defaultEventHandler with Reentry Property "EXIT"
* @param eventId eventType
* @param rootNode The root node.
* @return the defaultEventHandler for given eventId
*/
public static IEventExecTestCasePO getDefaultEventHandler(String eventId,
INodePO rootNode) {
createMap(rootNode);
return (handlerMap.get(eventId) != null)
? (IEventExecTestCasePO)handlerMap.get(eventId)
: (IEventExecTestCasePO)handlerMap.get("Default"); //$NON-NLS-1$
}
/**
* fill the map with defaultEventHandler for each supported eventType
* @param rootNode The root node.
*/
private static void createMap(INodePO rootNode) {
handlerMap = new HashMap < String, IEventExecTestCasePO > ();
if (rootNode instanceof ITestSuitePO) {
ITestSuitePO testSuite = (ITestSuitePO)rootNode;
Map<String, Integer> map = testSuite.getDefaultEventHandler();
Set<String> mapKeySet = map.keySet();
for (String key : mapKeySet) {
try {
handlerMap.put(key, createHandler(key,
ReentryProperty.getProperty(map.get(key)), rootNode));
} catch (InvalidDataException e) {
return;
}
}
handlerMap.put("Default", //$NON-NLS-1$
createHandler(Messages.DefaultEventHandlerUnknown,
ReentryProperty.EXIT, rootNode));
return;
}
// Impl.Class Action Error
handlerMap.put("TestErrorEvent.Action", //$NON-NLS-1$
createHandler(Messages.TestErrorEventAction,
ReentryProperty.EXIT, rootNode));
// Component not found
handlerMap.put("TestErrorEvent.CompNotFound", //$NON-NLS-1$
createHandler(Messages.TestErrorEventCompNotFound,
ReentryProperty.EXIT, rootNode));
// Configuration Error
handlerMap.put("TestErrorEvent.Config", //$NON-NLS-1$
createHandler(Messages.TestErrorEventConfig,
ReentryProperty.CONTINUE, rootNode));
// Verify Failed
handlerMap.put("TestErrorEvent.VerifyFailed", //$NON-NLS-1$
createHandler(Messages.TestErrorEventVerifyFailed,
ReentryProperty.CONTINUE, rootNode));
// Default Handler in case of unexpected eventType
handlerMap.put("Default", //$NON-NLS-1$
createHandler(Messages.DefaultEventHandlerUnknown,
ReentryProperty.EXIT, rootNode));
}
/**
* generate DefaultEventHandler with the given Reentry Property
* @param eventType type of error event
* @param prop reentry property, e.g. "EXIT"
* @param assocNode the associated node
* @return the eventHandler
*/
private static IEventExecTestCasePO createHandler(String eventType,
ReentryProperty prop, INodePO assocNode) {
IEventExecTestCasePO eventTC = NodeMaker.createEventExecTestCasePO(
org.eclipse.jubula.client.core.model.NodeMaker
.createSpecTestCasePO("EmptySpecTestCase"), assocNode); //$NON-NLS-1$
eventTC.setReentryProp(prop);
eventTC.setName(Messages.DefaultEventHandlerDefEH);
eventTC.setEventType(eventType);
return eventTC;
}
}