blob: 4cce03e657d49410986cb2ac77599a2ee6ebf2fa [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.guacamole.net.auth;
import java.util.Collection;
import org.apache.guacamole.GuacamoleException;
/**
* A set of all available records related to a type of activity which has a
* defined start and end time, such as a user being logged in or connected, or a
* subset of those records.
*
* @param <RecordType>
* The type of ActivityRecord contained within this set.
*/
public interface ActivityRecordSet<RecordType extends ActivityRecord> {
/**
* All properties of activity records which can be used as sorting
* criteria.
*/
enum SortableProperty {
/**
* The date and time when the activity associated with the record
* began.
*/
START_DATE
};
/**
* Returns all records within this set as a standard Collection.
*
* @return
* A collection containing all records within this set.
*
* @throws GuacamoleException
* If an error occurs while retrieving the records within this set.
*/
Collection<RecordType> asCollection() throws GuacamoleException;
/**
* Returns the subset of records which contain the given value. The
* properties and semantics involved with determining whether a particular
* record "contains" the given value is implementation dependent. This
* function may affect the contents of the current ActivityRecordSet. The
* contents of the current ActivityRecordSet should NOT be relied upon
* after this function is called.
*
* @param value
* The value which all records within the resulting subset should
* contain.
*
* @return
* The subset of records which contain the specified value.
*
* @throws GuacamoleException
* If an error occurs while restricting the current subset.
*/
ActivityRecordSet<RecordType> contains(String value)
throws GuacamoleException;
/**
* Returns the subset of records containing only the first
* <code>limit</code> records. If the subset has fewer than
* <code>limit</code> records, then this function has no effect. This
* function may also affect the contents of the current ActivityRecordSet.
* The contents of the current ActivityRecordSet should NOT be relied upon
* after this function is called.
*
* @param limit
* The maximum number of records that the new subset should contain.
*
* @return
* The subset of records that containing only the first
* <code>limit</code> records.
*
* @throws GuacamoleException
* If an error occurs while limiting the current subset.
*/
ActivityRecordSet<RecordType> limit(int limit) throws GuacamoleException;
/**
* Returns a ActivityRecordSet containing identically the records within
* this set, sorted according to the specified criteria. The sort operation
* performed is guaranteed to be stable with respect to any past call to
* sort(). This function may also affect the contents of the current
* ActivityRecordSet. The contents of the current ActivityRecordSet
* should NOT be relied upon after this function is called.
*
* @param property
* The property by which the records within the resulting set should be
* sorted.
*
* @param desc
* Whether the records should be sorted according to the specified
* property in descending order. If false, records will be sorted
* according to the specified property in ascending order.
*
* @return
* The ActivityRecordSet, sorted according to the specified criteria.
*
* @throws GuacamoleException
* If an error occurs while sorting the current subset, or if the given
* property is not supported by the implementation.
*/
ActivityRecordSet<RecordType> sort(SortableProperty property, boolean desc)
throws GuacamoleException;
}