/*
* 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.events.admin;
import java.util.Date;
import java.util.List;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public interface AdminEventQuery {
/**
* Search by resource realm
*
* @param realmId realm id
* @return Associated <code>AdminEventQuery</code> for method chaining
*/
AdminEventQuery realm(String realmId);
/**
* Search by authentication realm
*
* @param realmId realm name
* @return Associated <code>AdminEventQuery</code> for method chaining
*/
AdminEventQuery authRealm(String realmId);
/**
* Search by authenticated client
*
* @param clientId client uuid
* @return Associated <code>AdminEventQuery</code> for method chaining
*/
AdminEventQuery authClient(String clientId);
/**
* Search by authenticated user
*
* @param userId user uuid
* @return Associated <code>AdminEventQuery</code> for method chaining
*/
AdminEventQuery authUser(String userId);
/**
* Search by request ip address
*
* @param ipAddress
* @return Associated <code>AdminEventQuery</code> for method chaining
*/
AdminEventQuery authIpAddress(String ipAddress);
/**
* Search by operation type
*
* @param operations
* @return <code>this</code> for method chaining
*/
AdminEventQuery operation(OperationType... operations);
/**
* Search by {@link ResourceType}.
* @param resourceTypes
* @return <code>this</code> for method chaining
*/
AdminEventQuery resourceType(ResourceType ... resourceTypes);
/**
* Search by resource path. Supports wildcards <code>*</code> and <code>**</code>. For example:
* <ul>
* <li><b>*/master</b> - matches 'realms/master'</li>
* <li><b>**/00d4b16f</b> - matches 'realms/master/clients/00d4b16f'</li>
* <li><b>realms/master/**</b> - matches anything under 'realms/master'</li>
* </ul>
*
* @param resourcePath
* @return <code>this</code> for method chaining
*/
AdminEventQuery resourcePath(String resourcePath);
/**
* Search by events after the specified time
*
* @param fromTime from date
* @return <code>this</code> for method chaining
*/
AdminEventQuery fromTime(Date fromTime);
/**
* Search by events before the specified time
*
* @param toTime to date
* @return <code>this</code> for method chaining
*/
AdminEventQuery toTime(Date toTime);
/**
* Used for pagination
*
* @param first first result to return
* @return <code>this</code> for method chaining
*/
AdminEventQuery firstResult(int first);
/**
* Use for pagination
*
* @param max the maximum results to return
* @return <code>this</code> for method chaining
*/
AdminEventQuery maxResults(int max);
/**
* Executes the query and returns the results
*
* @return
*/
List<AdminEvent> getResultList();
}