/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * 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 org.keycloak.examples.providers.events; import org.keycloak.events.Event; import org.keycloak.events.EventQuery; import org.keycloak.events.EventType; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; /** * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a> */ public class MemEventQuery implements EventQuery { private List<Event> events; private int first; private int max; public MemEventQuery(List<Event> events) { this.events = events; } @Override public EventQuery type(EventType... types) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { Event next = itr.next(); boolean include = false; for (EventType e : types) { if (next.getType().equals(e)) { include = true; break; } } if (!include) { itr.remove(); } } return this; } @Override public EventQuery realm(String realmId) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!itr.next().getRealmId().equals(realmId)) { itr.remove(); } } return this; } @Override public EventQuery client(String clientId) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!itr.next().getClientId().equals(clientId)) { itr.remove(); } } return this; } @Override public EventQuery user(String userId) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!itr.next().getUserId().equals(userId)) { itr.remove(); } } return this; } @Override public EventQuery fromDate(Date fromDate) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!(itr.next().getTime() >= fromDate.getTime())) { itr.remove(); } } return this; } @Override public EventQuery toDate(Date toDate) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!(itr.next().getTime() <= toDate.getTime())) { itr.remove(); } } return this; } @Override public EventQuery ipAddress(String ipAddress) { Iterator<Event> itr = this.events.iterator(); while (itr.hasNext()) { if (!itr.next().getIpAddress().equals(ipAddress)) { itr.remove(); } } return this; } @Override public EventQuery firstResult(int result) { this.first = result; return this; } @Override public EventQuery maxResults(int results) { this.max = results; return this; } @Override public List<Event> getResultList() { if (events.size() < first) { return Collections.emptyList(); } int end = first + max <= events.size() ? first + max : events.size(); return events.subList(first, end); } }