// Path: src/main/java/net/unicon/cas/addons/authentication/PasswordExpirationStatusPolicy.java
// public interface PasswordExpirationStatusPolicy {
// 
//     /**
//      * Returns password status
//      * @param principal
//      * @return PasswordStatus based on provided authenticated principal
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(Principal principal) throws RuntimeException;
// 
//     /**
//      * Returns password status
//      * @param principalAttributes
//      * @return PasswordStatus based on provided authenticated principal's attributes
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(Map<String, Object> principalAttributes) throws RuntimeException;
// 
//     /**
//      * Returns password status
//      * @param credentials
//      * @return PasswordStatus based on provided user's credentials
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(UsernamePasswordCredentials credentials) throws RuntimeException;
// 
//     enum PasswordStatus {
//         VALID,
//         ABOUT_TO_EXPIRE,
//         EXPIRED,
//         CHANGED_BY_ADMINISTRATOR,
//         OTHER,
//         UNDETERMINED;
// 
//         private int daysBeforeExpiration;
// 
//         public int getDaysBeforeExpiration() {
//             return this.daysBeforeExpiration;
//         }
// 
//         public PasswordStatus withDaysBeforeExpiration(int daysBeforeExpiration) {
//             this.daysBeforeExpiration = daysBeforeExpiration;
//             return this;
//         }
//     };
// }


import net.unicon.cas.addons.authentication.PasswordExpirationStatusPolicy;
import org.jasig.cas.authentication.principal.Principal;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import java.util.Map;
package net.unicon.cas.addons.authentication.support;



/**
 * Skeletal convenience implementation of <code>PasswordExpirationStatusPolicy</code> to make implementations easier e.g. methods could be implemented
 * selectively.
 *
 * All methods throw <code>UnsupportedOperationException</code> and so subclasses should override (and implement) the methods of interest.

 * @author Dmitriy Kopylenko
 * @author Unicon, inc.
 * @since 0.5
 */
public class PasswordExpirationStatusPolicySupport implements PasswordExpirationStatusPolicy {

	@Override
	public PasswordStatus computePasswordExpirationStatus(Principal principal) throws RuntimeException {
		throw new UnsupportedOperationException("This method is not implemented.");
	}

	@Override
	public PasswordStatus computePasswordExpirationStatus(Map<String, Object> principalAttributes) throws RuntimeException {
// Path: src/main/java/net/unicon/cas/addons/authentication/PasswordExpirationStatusPolicy.java
// public interface PasswordExpirationStatusPolicy {
// 
//     /**
//      * Returns password status
//      * @param principal
//      * @return PasswordStatus based on provided authenticated principal
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(Principal principal) throws RuntimeException;
// 
//     /**
//      * Returns password status
//      * @param principalAttributes
//      * @return PasswordStatus based on provided authenticated principal's attributes
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(Map<String, Object> principalAttributes) throws RuntimeException;
// 
//     /**
//      * Returns password status
//      * @param credentials
//      * @return PasswordStatus based on provided user's credentials
//      * @throws RuntimeException
//      */
//     PasswordStatus computePasswordExpirationStatus(UsernamePasswordCredentials credentials) throws RuntimeException;
// 
//     enum PasswordStatus {
//         VALID,
//         ABOUT_TO_EXPIRE,
//         EXPIRED,
//         CHANGED_BY_ADMINISTRATOR,
//         OTHER,
//         UNDETERMINED;
// 
//         private int daysBeforeExpiration;
// 
//         public int getDaysBeforeExpiration() {
//             return this.daysBeforeExpiration;
//         }
// 
//         public PasswordStatus withDaysBeforeExpiration(int daysBeforeExpiration) {
//             this.daysBeforeExpiration = daysBeforeExpiration;
//             return this;
//         }
//     };
// }


// Path: src/main/java/net/unicon/cas/addons/authentication/support/PasswordExpirationStatusPolicySupport.java
import net.unicon.cas.addons.authentication.PasswordExpirationStatusPolicy;
import org.jasig.cas.authentication.principal.Principal;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import java.util.Map;

package net.unicon.cas.addons.authentication.support;



/**
 * Skeletal convenience implementation of <code>PasswordExpirationStatusPolicy</code> to make implementations easier e.g. methods could be implemented
 * selectively.
 *
 * All methods throw <code>UnsupportedOperationException</code> and so subclasses should override (and implement) the methods of interest.

 * @author Dmitriy Kopylenko
 * @author Unicon, inc.
 * @since 0.5
 */
public class PasswordExpirationStatusPolicySupport implements PasswordExpirationStatusPolicy {

	@Override
	public PasswordStatus computePasswordExpirationStatus(Principal principal) throws RuntimeException {
		throw new UnsupportedOperationException("This method is not implemented.");
	}

	@Override
	public PasswordStatus computePasswordExpirationStatus(Map<String, Object> principalAttributes) throws RuntimeException {
		throw new UnsupportedOperationException("This method is not implemented.");