/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.event; import com.espertech.esper.client.EventType; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; public class EventAdapterServiceAnonymousTypeCache { private final int size; private final Deque<EventTypeSPI> recentTypes; public EventAdapterServiceAnonymousTypeCache(int size) { this.size = size; recentTypes = new ArrayDeque<EventTypeSPI>(size); } public synchronized EventType addReturnExistingAnonymousType(EventType requiredType) { // only EventTypeSPI compliant implementations considered if (!(requiredType instanceof EventTypeSPI)) { return requiredType; } // check recent types for (EventTypeSPI existing : recentTypes) { if (existing.getClass() == requiredType.getClass() && Arrays.equals(requiredType.getPropertyNames(), existing.getPropertyNames()) && Arrays.equals(requiredType.getPropertyDescriptors(), existing.getPropertyDescriptors()) && existing.equalsCompareType(requiredType)) { return existing; } } // add, removing the oldest if (recentTypes.size() == size && !recentTypes.isEmpty()) { recentTypes.removeFirst(); } if (recentTypes.size() < size) { recentTypes.addLast((EventTypeSPI) requiredType); } return requiredType; } }