| /******************************************************************************* |
| * Copyright (c) 2004, 2007 Boeing. |
| * 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: |
| * Boeing - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.osee.ote.core.framework; |
| |
| import java.util.List; |
| import java.util.concurrent.CopyOnWriteArrayList; |
| import java.util.logging.Level; |
| |
| import org.eclipse.osee.framework.jdk.core.type.IPropertyStore; |
| import org.eclipse.osee.framework.logging.BaseStatus; |
| import org.eclipse.osee.ote.core.TestScript; |
| import org.eclipse.osee.ote.core.environment.TestEnvironment; |
| import org.eclipse.osee.ote.core.framework.event.IEventData; |
| import org.eclipse.osee.ote.core.framework.event.IEventDataProvider; |
| |
| public class BaseTestLifecycleListenerProvider implements ITestLifecycleListenerProvider { |
| |
| private final IEventDataProvider eventProvider; |
| private final List<ITestLifecycleListener> listeners; |
| private int listenerCountAtPreinit = 0; |
| |
| public BaseTestLifecycleListenerProvider(IEventDataProvider eventProvider) { |
| this.eventProvider = eventProvider; |
| listeners = new CopyOnWriteArrayList<>(); |
| } |
| |
| @Override |
| public void clear() { |
| listeners.clear(); |
| } |
| |
| @Override |
| public boolean addListener(ITestLifecycleListener listener) { |
| return listeners.add(listener); |
| } |
| |
| @Override |
| public IMethodResult notifyPostDispose(IPropertyStore propertyStore, TestEnvironment env) { |
| IEventData eventData = eventProvider.getEventData(propertyStore, null); |
| MethodResultImpl result = new MethodResultImpl(ReturnCode.OK); |
| for (ITestLifecycleListener listener : listeners) { |
| try { |
| result = collectStatus(result, listener.postDispose(eventData, env)); |
| } catch (Throwable th) { |
| result = collectStatus(result,new MethodResultImpl(ReturnCode.ERROR)); |
| result.addStatus(new BaseStatus(this.getClass().getName(), Level.SEVERE, th)); |
| } |
| } |
| |
| int newSize = listeners.size(); |
| if( this.listenerCountAtPreinit != newSize) |
| { |
| System.err.printf("+++++++++++++++++++++++++++++++++++++++++There are now %s listeners when there were %s to start with\n", listenerCountAtPreinit, newSize ); |
| for (ITestLifecycleListener listener : listeners) { |
| System.err.println("Listener: " + listener.getClass().getName()); |
| } |
| System.err.println("-----------------------------------------------------------------------------------------------------"); |
| } |
| return result; |
| } |
| |
| @Override |
| public IMethodResult notifyPostInstantiation(IPropertyStore propertyStore, TestScript test, TestEnvironment env) { |
| IEventData eventData = eventProvider.getEventData(propertyStore, test); |
| MethodResultImpl result = new MethodResultImpl(ReturnCode.OK); |
| for (ITestLifecycleListener listener : listeners) { |
| result = collectStatus(result, listener.postInstantiation(eventData, env)); |
| } |
| return result; |
| } |
| |
| @Override |
| public IMethodResult notifyPreDispose(IPropertyStore propertyStore, TestScript test, TestEnvironment env) { |
| IEventData eventData = eventProvider.getEventData(propertyStore, test); |
| MethodResultImpl result = new MethodResultImpl(ReturnCode.OK); |
| for (ITestLifecycleListener listener : listeners) { |
| try { |
| result = collectStatus(result, listener.preDispose(eventData, env)); |
| } catch (Throwable th) { |
| result = collectStatus(result,new MethodResultImpl(ReturnCode.ERROR)); |
| result.addStatus(new BaseStatus(this.getClass().getName(), Level.SEVERE, th)); |
| } |
| } |
| return result; |
| } |
| |
| @Override |
| public IMethodResult notifyPreInstantiation(IPropertyStore propertyStore, TestEnvironment env) { |
| IEventData eventData = eventProvider.getEventData(propertyStore, null); |
| MethodResultImpl result = new MethodResultImpl(ReturnCode.OK); |
| |
| for (ITestLifecycleListener listener : listeners) { |
| result = collectStatus(result, listener.preInstantiation(eventData, env)); |
| } |
| |
| this.listenerCountAtPreinit = listeners.size(); |
| return result; |
| } |
| |
| @Override |
| public boolean removeListener(ITestLifecycleListener listener) { |
| return listeners.remove(listener); |
| } |
| |
| private MethodResultImpl collectStatus(MethodResultImpl result, IMethodResult listenerResult) { |
| if (listenerResult.getReturnCode() != ReturnCode.OK) { |
| if (result.getReturnCode() == ReturnCode.OK) { |
| result = new MethodResultImpl(ReturnCode.OK); |
| } |
| result.setReturnCode(listenerResult.getReturnCode()); |
| result.addStatus(listenerResult.getStatus()); |
| } |
| return result; |
| } |
| } |