edu.indiana.lib.twinpeaks.util.CookieData.java Source code

Java tutorial

Introduction

Here is the source code for edu.indiana.lib.twinpeaks.util.CookieData.java

Source

/**********************************************************************************
*
 * Copyright (c) 2003, 2004, 2007, 2008 The Sakai Foundation
 *
 * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 edu.indiana.lib.twinpeaks.util;

import java.io.*;
import java.net.*;
import java.util.*;

/**
 * Represent a single cookie
 */
public class CookieData {

    private static org.apache.commons.logging.Log _log = LogUtils.getLog(CookieData.class);
    /**
     * Null (unset) cookie age
     */
    public static final int NULL_AGE = -1;
    /**
     * Expired cookie
     */
    public static final int EXPIRED_AGE = 0;

    private String key;
    private String value;

    private String path;
    private String domain;
    private String version;

    private String expires;
    private int maxAge;
    private boolean secure;

    private CookieData() {
    }

    /**
     * Constructor
     * @param url URL associated with this cookie
     * @param key Cookie name
     * @param value Cookie value
     */
    public CookieData(URL url, String key, String value) {
        int slash = url.getFile().lastIndexOf("/");
        /*
         * Save cookie name and content
         */
        this.key = key;
        this.value = value;
        /*
         * Domain defaults to hostname, path to the "directory" portion of
         * the request, minus all text from the rightmost "/" character to
         * the end of the string...
         */
        this.path = slash < 1 ? "" : url.getFile().substring(0, slash);
        this.domain = url.getHost();

        this.version = null;
        this.expires = null;
        this.maxAge = NULL_AGE;

        this.secure = false;
    }

    /**
     * Get cookie name
     * @return The cooke name
     */
    public String getName() {
        return this.key;
    }

    /**
     * Get cookie value (the cookie "text")
     * @return The value
     */
    public String getValue() {
        return this.value;
    }

    /**
     * Save the path
     */
    public void setPath(String path) {
        this.path = path;
    }

    /**
     * Get the path
     * @return The cooke path attribute value (null if none)
     */
    public String getPath() {
        return this.path;
    }

    /**
     * Save the expiration date
     */
    public void setExpires(String expires) {
        this.expires = expires;
    }

    /**
     * Get the expiration date
     * @return The expires attribute value (null if none)
     */
    public String getExpires() {
        return this.expires;
    }

    /**
     * Save the domain
     */
    public void setDomain(String domain) {
        this.domain = domain;
    }

    /**
     * Get the domain
     * @return The domain attribute value (null if none)
     */
    public String getDomain() {
        return this.domain;
    }

    /**
     * Save the version
     */
    public void setVersion(String version) {
        this.version = version;
    }

    /**
     * Get the cookie version
     * @return The version (null if none)
     */
    public String getVersion() {
        return this.version;
    }

    /**
     * Set the maximum age for this cookie
     */
    public void setMaxAge(String maxAge) {
        try {
            this.maxAge = Integer.parseInt(maxAge);
        } catch (NumberFormatException ignore) {
        }
    }

    /**
     * Get the maximum age for this cookie
     */
    public int getMaxAge() {
        return this.maxAge;
    }

    /**
     * Save security setting (true if cookie to be sent only via HTTPS)
     */
    public void setSecure(boolean secure) {
        this.secure = secure;
    }

    public boolean getSecure() {
        return this.secure;
    }

    /**
     * Equal strings?
     * @param a String one
     * @param b Stringtwo
     * @return true if both are null, or String "equals" is true
     */
    private boolean stringEquals(String a, String b) {
        if ((a == null) && (b == null)) {
            return true;
        }

        if ((a == null) || (b == null)) {
            return false;
        }

        return a.equals(b);
    }

    /**
     * Equal cookies?
     * @param cookie for comparison
     * @return true if cookie name, path, and domain are all equal
     */
    public boolean equals(CookieData cookie) {
        if (!key.equals(cookie.getName())) {
            return false;
        }

        return stringEquals(path, cookie.getPath()) && stringEquals(domain, cookie.getDomain());
    }
}