    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.html;
    017
    018
    019/**
    020 * CreateToken インターフェース の実装Abstractクラスです。
    021 * これを,共通のスーパークラスとして 各種トークン作成に使います。
    022 *
    023 * 各種トークンに対応したサブクラス上でgenerateURLをオーバーライドして下さい。
    024 *
    025 * @og.group 画面表示
    026 * @og.rev 5.8.2.1 (2014/12/13) 新規作成
    027 *
    028 * @version  4.0
    029 * @author       Kazuhiko Hasegawa
    030 * @since    JDK5.0,
    031 */
    032public abstract class AbstractCreateToken implements CreateToken {
    033        private static long     tokenTime= 1000*60*60; // 初期は1時間の有効期限とする
    034
    035        /**
    036         * トークン付のURLを返します。
    037         *
    038         * @param       inURL トークンを付加するURL
    039         * @param       time 有効期限(millis）
    040         * @param       user ユーザ
    041         */
    042        public String generateURL( final String inURL, final long time, final String user ) {
    043                return generateURL( inURL, time, user, null );
    044        }
    045
    046        /**
    047         * トークン付のURLを返します。
    048         * 通常はこのメソッドをオーバーライドします。
    049         *
    050         * @param       inURL トークンを付加するURL
    051         * @param       time 有効期限(millis）
    052         * @param       user ユーザ
    053         * @param       param パラメータ
    054         */
    055        public String generateURL( final String inURL, final long time, final String user, final String[] param ) {
    056                return inURL;
    057        }
    058
    059        /**
    060         * Aタグの文字列を解析して、hrefの最後にトークンを付加します。
    061         * URLチェックよりも後ろにトークンが付く形になるので併用は可能です。
    062         *
    063         * @param   tag Aタグ文字列
    064         * @param   time 有効期限(millis）
    065         * @param       user ユーザ
    066         *
    067         * @return  トークンが付加されたAタグ文字列
    068         */
    069        public String embedToken( final String tag, final long time, final String user ) {
    070                return embedToken( tag, time, user, null );
    071        }
    072
    073        /**
    074         * Aタグの文字列を解析して、hrefの最後にトークンを付加します。
    075         * URLチェックよりも後ろにトークンが付く形になるので併用は可能です。
    076         *
    077         * @param   tag Aタグ文字列
    078         * @param   time 有効期限(millis）
    079         * @param       user ユーザ
    080         * @param       param パラメータ
    081         *
    082         * @return  トークンが付加されたAタグ文字列
    083         */
    084        public String embedToken( final String tag, final long time, final String user, final String[] param  ) {
    085                String rtn = tag;
    086                int hrefStr = rtn.indexOf( "href=\"" );
    087                if( hrefStr >= 0 ) {
    088                        int hrefEnd = rtn.indexOf( "\"",hrefStr + 6 );
    089                        if( hrefEnd >= 0 ) {
    090                                String href = rtn.substring( hrefStr + 6, hrefEnd );
    091                                href = generateURL( href, time, user, param );
    092                                rtn = rtn.substring( 0,  hrefStr ) + "href=\"" + href + rtn.substring( hrefEnd );
    093                        }
    094                }
    095                return rtn;
    096        }
    097
    098
    099
    100}