View Javadoc

    1   package org.apache.turbine.util;
    2
    3
    4   /*
    5    * Licensed to the Apache Software Foundation (ASF) under one
    6    * or more contributor license agreements.  See the NOTICE file
    7    * distributed with this work for additional information
    8    * regarding copyright ownership.  The ASF licenses this file
    9    * to you under the Apache License, Version 2.0 (the
    10   * "License"); you may not use this file except in compliance
    11   * with the License.  You may obtain a copy of the License at
    12   *
    13   *   http://www.apache.org/licenses/LICENSE-2.0
    14   *
    15   * Unless required by applicable law or agreed to in writing,
    16   * software distributed under the License is distributed on an
    17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    18   * KIND, either express or implied.  See the License for the
    19   * specific language governing permissions and limitations
    20   * under the License.
    21   */
    22
    23
    24  import javax.servlet.http.HttpServletRequest;
    25
    26  import org.apache.commons.lang.StringUtils;
    27
    28  import org.apache.commons.logging.Log;
    29  import org.apache.commons.logging.LogFactory;
    30
    31  import org.apache.turbine.util.uri.URIConstants;
    32
    33  /**
    34   * Holds basic server information under which Turbine is running.
    35   * This class is accessable via the RunData object within the Turbine
    36   * system.  You can also use it as a placeholder for this information
    37   * if you are only emulating a servlet system.
    38   *
    39   * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
    40   * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
    41   * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
    42   * @version $Id: ServerData.java 1709648 2015-10-20 17:08:10Z tv $
    43   */
    44  public class ServerData
    45  {
    46      /** Cached serverName, */
    47      private String serverName = null;
    48
    49      /** Cached serverPort. */
    50      private int serverPort = 0;
    51
    52      /** Cached serverScheme. */
    53      private String serverScheme = null;
    54
    55      /** Cached script name. */
    56      private String  scriptName = null;
    57
    58      /** Cached context path. */
    59      private String  contextPath = null;
    60
    61      /** Logging */
    62      private static Log log = LogFactory.getLog(ServerData.class);
    63
    64      /**
    65       * Constructor.
    66       *
    67       * @param serverName The server name.
    68       * @param serverPort The server port.
    69       * @param serverScheme The server scheme.
    70       * @param scriptName The script name.
    71       * @param contextPath The context Path
    72       */
    73      public ServerData(String serverName,
    74          int serverPort,
    75          String serverScheme,
    76          String scriptName,
    77          String contextPath)
    78      {
    79          if (log.isDebugEnabled())
    80          {
    81              StringBuilder sb = new StringBuilder();
    82              sb.append("Constructor(");
    83              sb.append(serverName);
    84              sb.append(", ");
    85              sb.append(serverPort);
    86              sb.append(", ");
    87              sb.append(serverScheme);
    88              sb.append(", ");
    89              sb.append(scriptName);
    90              sb.append(", ");
    91              sb.append(contextPath);
    92              sb.append(")");
    93              log.debug(sb.toString());
    94          }
    95
    96          setServerName(serverName);
    97          setServerPort(serverPort);
    98          setServerScheme(serverScheme);
    99          setScriptName(scriptName);
    100         setContextPath(contextPath);
    101     }
    102
    103     /**
    104      * Copy-Constructor
    105      *
    106      * @param serverData A ServerData Object
    107      */
    108     public ServerData(ServerData serverData)
    109     {
    110         log.debug("Copy Constructor(" + serverData + ")");
    111
    112         setServerName(serverData.getServerName());
    113         setServerPort(serverData.getServerPort());
    114         setServerScheme(serverData.getServerScheme());
    115         setScriptName(serverData.getScriptName());
    116         setContextPath(serverData.getContextPath());
    117     }
    118
    119     /**
    120      * A C'tor that takes a HTTP Request object and
    121      * builds the server data from its contents
    122      *
    123      * @param req The HTTP Request
    124      */
    125     public ServerData(HttpServletRequest req)
    126     {
    127         setServerName(req.getServerName());
    128         setServerPort(req.getServerPort());
    129         setServerScheme(req.getScheme());
    130         setScriptName(req.getServletPath());
    131         setContextPath(req.getContextPath());
    132     }
    133
    134     /**
    135      * generates a new Object with the same values as this one.
    136      *
    137      * @return A cloned object.
    138      */
    139     public Object clone()
    140     {
    141         log.debug("clone()");
    142         return new ServerData(this);
    143     }
    144
    145     /**
    146      * Get the name of the server.
    147      *
    148      * @return A String.
    149      */
    150     public String getServerName()
    151     {
    152         return StringUtils.isEmpty(serverName) ? "" : serverName;
    153     }
    154
    155     /**
    156      * Sets the cached serverName.
    157      *
    158      * @param serverName the server name.
    159      */
    160     public void setServerName(String serverName)
    161     {
    162         log.debug("setServerName(" + serverName + ")");
    163         this.serverName = serverName;
    164     }
    165
    166     /**
    167      * Get the server port.
    168      *
    169      * @return the server port.
    170      */
    171     public int getServerPort()
    172     {
    173         return this.serverPort;
    174     }
    175
    176     /**
    177      * Sets the cached serverPort.
    178      *
    179      * @param serverPort the server port.
    180      */
    181     public void setServerPort(int serverPort)
    182     {
    183         log.debug("setServerPort(" + serverPort + ")");
    184         this.serverPort = serverPort;
    185     }
    186
    187     /**
    188      * Get the server scheme.
    189      *
    190      * @return the server scheme.
    191      */
    192     public String getServerScheme()
    193     {
    194         return StringUtils.isEmpty(serverScheme) ? "" : serverScheme;
    195     }
    196
    197     /**
    198      * Sets the cached serverScheme.
    199      *
    200      * @param serverScheme the server scheme.
    201      */
    202     public void setServerScheme(String serverScheme)
    203     {
    204         log.debug("setServerScheme(" + serverScheme + ")");
    205         this.serverScheme = serverScheme;
    206     }
    207
    208     /**
    209      * Get the script name
    210      *
    211      * @return the script name.
    212      */
    213     public String getScriptName()
    214     {
    215         return StringUtils.isEmpty(scriptName) ? "" : scriptName;
    216     }
    217
    218     /**
    219      * Set the script name.
    220      *
    221      * @param scriptName the script name.
    222      */
    223     public void setScriptName(String scriptName)
    224     {
    225         log.debug("setScriptName(" + scriptName + ")");
    226         this.scriptName = scriptName;
    227     }
    228
    229     /**
    230      * Get the context path.
    231      *
    232      * @return the context path.
    233      */
    234     public String getContextPath()
    235     {
    236         return StringUtils.isEmpty(contextPath) ? "" : contextPath;
    237     }
    238
    239     /**
    240      * Set the context path.
    241      *
    242      * @param contextPath A String.
    243      */
    244     public void setContextPath(String contextPath)
    245     {
    246         log.debug("setContextPath(" + contextPath + ")");
    247         this.contextPath = contextPath;
    248     }
    249
    250     /**
    251      * Appends the Host URL to the supplied StringBuilder.
    252      *
    253      * @param url A StringBuilder object
    254      */
    255     public void getHostUrl(StringBuilder url)
    256     {
    257         url.append(getServerScheme());
    258         url.append("://");
    259         url.append(getServerName());
    260         if ((getServerScheme().equals(URIConstants.HTTP)
    261                 && getServerPort() != URIConstants.HTTP_PORT)
    262             ||
    263             (getServerScheme().equals(URIConstants.HTTPS)
    264                 && getServerPort() != URIConstants.HTTPS_PORT)
    265             )
    266         {
    267             url.append(":");
    268             url.append(getServerPort());
    269         }
    270     }
    271
    272     /**
    273      * Returns this object as an URL.
    274      *
    275      * @return The contents of this object as a String
    276      */
    277     public String toString()
    278     {
    279         StringBuilder url = new StringBuilder();
    280
    281         getHostUrl(url);
    282
    283         url.append(getContextPath());
    284         url.append(getScriptName());
    285         return url.toString();
    286     }
    287 }