001    // Copyright 2010, 2011 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    // http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.internal.services;
016    
017    import org.apache.tapestry5.Link;
018    
019    /**
020     * Identifies how a {@link Link} should handle security.
021     * 
022     * @since 5.2.2
023     */
024    public enum LinkSecurity
025    {
026        /** The request was insecure, but the targeted page was secure, so the URI should be absolute and secure. */
027        FORCE_SECURE,
028    
029        /** The request was was secure but the targeted page is not, so the URI should be absolute and insecure. */
030        FORCE_INSECURE,
031    
032        /**
033         * The request is insecure, which matches the targeted page security, so there's no explicit need for an absolute
034         * URI.
035         */
036        INSECURE,
037    
038        /**
039         * The request is secure, which matches the targeted page security, so there's no explicit need for an absolute
040         * URI.
041         */
042        SECURE;
043    
044        /** Promotes to either {@link #FORCE_SECURE} or {@link #FORCE_INSECURE}. */
045        public LinkSecurity promote()
046        {
047            switch (this)
048            {
049                case SECURE:
050                case FORCE_SECURE:
051                    return FORCE_SECURE;
052    
053                default:
054                    return FORCE_INSECURE;
055            }
056        }
057    
058        /** Does this value indicate forcing an absolute URI (one that includes scheme and hostname)? */
059        public boolean isAbsolute()
060        {
061            return this == FORCE_SECURE || this == FORCE_INSECURE;
062        }
063    }