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
015package org.apache.tapestry5.internal.services;
016
017import org.apache.tapestry5.Link;
018
019/**
020 * Identifies how a {@link Link} should handle security.
021 * 
022 * @since 5.2.2
023 */
024public 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}