// Path: src/main/java/net/unicon/cas/addons/info/SingleSignOnSessionsReport.java
// public interface SingleSignOnSessionsReport {
// 
// 
// 	enum SsoSessionAttributeKeys {
// 
// 		AUTHENTICATED_PRINCIPAL("authenticated_principal"),
// 
// 		AUTHENTICATION_DATE("authentication_date"),
// 
// 		NUMBER_OF_USES("number_of_uses");
// 
// 		private String attributeKey;
// 
// 		private SsoSessionAttributeKeys(String attributeKey) {
// 			this.attributeKey = attributeKey;
// 		}
// 
// 		@Override
// 		public String toString() {
// 			return this.attributeKey;
// 		}
// 	}
// 
// 	/**
// 	 * Get a collection of active (unexpired) CAS' SSO sessions (with their associated authentication and metadata).
// 	 * <p/>
// 	 * If there are no active SSO session, return an empty Collection and never return <strong>null</strong>
// 	 *
// 	 * @return a collection of SSO sessions (represented by Map of its attributes) OR and empty collection if there are
// 	 *         no active SSO sessions
// 	 */
// 	Collection<Map<String, Object>> getActiveSsoSessions() throws BulkRetrievalOfTicketsNotSupportedException;
// 
// }
// 
// Path: src/main/java/net/unicon/cas/addons/ticket/BulkRetrievalOfTicketsNotSupportedException.java
// public class BulkRetrievalOfTicketsNotSupportedException extends UnsupportedOperationException {
// 
//     private static final long serialVersionUID = 306893856892085373L;
// 
//     public BulkRetrievalOfTicketsNotSupportedException(String s) {
//   		super(s);
//   	}
// 
//   	public BulkRetrievalOfTicketsNotSupportedException(String s, Throwable throwable) {
//   		super(s, throwable);
//   	}
// }
// 
// Path: src/main/java/net/unicon/cas/addons/ticket/TicketSupport.java
// public interface TicketSupport {
// 
// 	/**
// 	 * Convenience method that deletes a provided TGT from the underlying ticket store
// 	 * if that TGT is determined to be expired. If the provided ticket does not exist in a ticket store,
// 	 * or not a <code>TicketGrantingTicket</code>, simply returns
// 	 *
// 	 * @param ticketGrantingTicketId for which to delete the underlying ticket
// 	 *                               <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions - runtime or otherwise
// 	 */
// 	void deleteExpiredTicketGrantingTicket(String ticketGrantingTicketId);
// 
// 	/**
// 	 * Convenience method to determine if a TicketGrantingTicket represented by a given id exists in a underlying ticket store
// 	 * AND it is expired
// 	 *
// 	 * @param ticketGrantingTicketId representing TicketGrantingTicket
// 	 * @return true if both predicate conditions satisfied, false otherwise
// 	 *         <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions - runtime or otherwise
// 	 */
// 	boolean ticketGrantingTicketExistsAndExpired(String ticketGrantingTicketId);
// 
// 	/**
// 	 * Convenience method to return a collection of active (non-expired at the time of call) from CAS' underlying ticket store.
// 	 *
// 	 * @return a list of non-expired TGTs OR an empty list and NEVER <b>null</b>
// 	 *         <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions other than
// 	 *         <code>BulkRetrievalOfTicketsNotSupportedException</code>
// 	 * @throws BulkRetrievalOfTicketsNotSupportedException
// 	 */
// 	List<TicketGrantingTicket> getNonExpiredTicketGrantingTickets() throws BulkRetrievalOfTicketsNotSupportedException;
// }


import net.unicon.cas.addons.info.SingleSignOnSessionsReport;
import net.unicon.cas.addons.support.ThreadSafe;
import net.unicon.cas.addons.ticket.BulkRetrievalOfTicketsNotSupportedException;
import net.unicon.cas.addons.ticket.TicketSupport;
import org.jasig.cas.ticket.TicketGrantingTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
package net.unicon.cas.addons.info.internal;




/**
 * Default implementation of <code>SingleSignOnSessionReport</code>
 * <p/>
 * Uses CAS' <code>TicketSupport</code> API to retrieve <code>TicketGrantingTicket</code>s
 *
 * @author Dmitriy Kopylenko
 * @author Unicon, inc.
 * @since 1.0.3
 */
@ThreadSafe
@Component
// Path: src/main/java/net/unicon/cas/addons/info/SingleSignOnSessionsReport.java
// public interface SingleSignOnSessionsReport {
// 
// 
// 	enum SsoSessionAttributeKeys {
// 
// 		AUTHENTICATED_PRINCIPAL("authenticated_principal"),
// 
// 		AUTHENTICATION_DATE("authentication_date"),
// 
// 		NUMBER_OF_USES("number_of_uses");
// 
// 		private String attributeKey;
// 
// 		private SsoSessionAttributeKeys(String attributeKey) {
// 			this.attributeKey = attributeKey;
// 		}
// 
// 		@Override
// 		public String toString() {
// 			return this.attributeKey;
// 		}
// 	}
// 
// 	/**
// 	 * Get a collection of active (unexpired) CAS' SSO sessions (with their associated authentication and metadata).
// 	 * <p/>
// 	 * If there are no active SSO session, return an empty Collection and never return <strong>null</strong>
// 	 *
// 	 * @return a collection of SSO sessions (represented by Map of its attributes) OR and empty collection if there are
// 	 *         no active SSO sessions
// 	 */
// 	Collection<Map<String, Object>> getActiveSsoSessions() throws BulkRetrievalOfTicketsNotSupportedException;
// 
// }
// 
// Path: src/main/java/net/unicon/cas/addons/ticket/BulkRetrievalOfTicketsNotSupportedException.java
// public class BulkRetrievalOfTicketsNotSupportedException extends UnsupportedOperationException {
// 
//     private static final long serialVersionUID = 306893856892085373L;
// 
//     public BulkRetrievalOfTicketsNotSupportedException(String s) {
//   		super(s);
//   	}
// 
//   	public BulkRetrievalOfTicketsNotSupportedException(String s, Throwable throwable) {
//   		super(s, throwable);
//   	}
// }
// 
// Path: src/main/java/net/unicon/cas/addons/ticket/TicketSupport.java
// public interface TicketSupport {
// 
// 	/**
// 	 * Convenience method that deletes a provided TGT from the underlying ticket store
// 	 * if that TGT is determined to be expired. If the provided ticket does not exist in a ticket store,
// 	 * or not a <code>TicketGrantingTicket</code>, simply returns
// 	 *
// 	 * @param ticketGrantingTicketId for which to delete the underlying ticket
// 	 *                               <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions - runtime or otherwise
// 	 */
// 	void deleteExpiredTicketGrantingTicket(String ticketGrantingTicketId);
// 
// 	/**
// 	 * Convenience method to determine if a TicketGrantingTicket represented by a given id exists in a underlying ticket store
// 	 * AND it is expired
// 	 *
// 	 * @param ticketGrantingTicketId representing TicketGrantingTicket
// 	 * @return true if both predicate conditions satisfied, false otherwise
// 	 *         <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions - runtime or otherwise
// 	 */
// 	boolean ticketGrantingTicketExistsAndExpired(String ticketGrantingTicketId);
// 
// 	/**
// 	 * Convenience method to return a collection of active (non-expired at the time of call) from CAS' underlying ticket store.
// 	 *
// 	 * @return a list of non-expired TGTs OR an empty list and NEVER <b>null</b>
// 	 *         <strong>NOTE TO IMPLEMENTERS:</strong> this method should never throw any exceptions other than
// 	 *         <code>BulkRetrievalOfTicketsNotSupportedException</code>
// 	 * @throws BulkRetrievalOfTicketsNotSupportedException
// 	 */
// 	List<TicketGrantingTicket> getNonExpiredTicketGrantingTickets() throws BulkRetrievalOfTicketsNotSupportedException;
// }


// Path: src/main/java/net/unicon/cas/addons/info/internal/DefaultSingleSignOnSessionsReport.java
import net.unicon.cas.addons.info.SingleSignOnSessionsReport;
import net.unicon.cas.addons.support.ThreadSafe;
import net.unicon.cas.addons.ticket.BulkRetrievalOfTicketsNotSupportedException;
import net.unicon.cas.addons.ticket.TicketSupport;
import org.jasig.cas.ticket.TicketGrantingTicket;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;

package net.unicon.cas.addons.info.internal;




/**
 * Default implementation of <code>SingleSignOnSessionReport</code>
 * <p/>
 * Uses CAS' <code>TicketSupport</code> API to retrieve <code>TicketGrantingTicket</code>s
 *
 * @author Dmitriy Kopylenko
 * @author Unicon, inc.
 * @since 1.0.3
 */
@ThreadSafe
@Component
public class DefaultSingleSignOnSessionsReport implements SingleSignOnSessionsReport {