/* * Copyright 2014 LinkedIn Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package azkaban.execapp; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import azkaban.event.EventListener; import azkaban.event.Event; import azkaban.event.Event.Type; public class EventCollectorListener implements EventListener { private ArrayList<Event> eventList = new ArrayList<Event>(); private HashSet<Event.Type> filterOutTypes = new HashSet<Event.Type>(); public void setEventFilterOut(Event.Type... types) { filterOutTypes.addAll(Arrays.asList(types)); } @Override public void handleEvent(Event event) { if (!filterOutTypes.contains(event.getType())) { eventList.add(event); } } public ArrayList<Event> getEventList() { return eventList; } public void writeAllEvents() { for (Event event : eventList) { System.out.print(event.getType()); System.out.print(","); } } public boolean checkOrdering() { long time = 0; for (Event event : eventList) { if (time > event.getTime()) { return false; } } return true; } public void checkEventExists(Type[] types) { int index = 0; for (Event event : eventList) { if (event.getRunner() == null) { continue; } if (index >= types.length) { throw new RuntimeException("More events than expected. Got " + event.getType()); } Type type = types[index++]; if (type != event.getType()) { throw new RuntimeException("Got " + event.getType() + ", expected " + type + " index:" + index); } } if (types.length != index) { throw new RuntimeException("Not enough events."); } } }