Package at.molindo.wicketutils.utils

Source Code of at.molindo.wicketutils.utils.WicketUtils

/**
* Copyright 2010 Molindo GmbH
*
* Licensed under the Apache 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.apache.org/licenses/LICENSE-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 at.molindo.wicketutils.utils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.NotImplementedException;
import org.apache.wicket.Application;
import org.apache.wicket.IRequestTarget;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.Request;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.Response;
import org.apache.wicket.Session;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.BufferedWebResponse;
import org.apache.wicket.protocol.http.RequestUtils;
import org.apache.wicket.protocol.http.WebRequest;
import org.apache.wicket.protocol.http.WebRequestCycle;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.protocol.http.request.WebClientInfo;
import org.apache.wicket.protocol.http.servlet.AbortWithHttpStatusException;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.IRequestCycleProcessor;
import org.apache.wicket.request.RequestParameters;
import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
import org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
import org.apache.wicket.util.value.ValueMap;

public final class WicketUtils {
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(WicketUtils.class);

  private WicketUtils() {
    // no instance
  }

  public static Class<? extends Page> getBookmarkablePage(final RequestCycle cycle) {
    if (cycle == null) {
      return null;
    }

    final IRequestTarget target = cycle.getRequestTarget();
    if (target instanceof BookmarkablePageRequestTarget) {
      return ((BookmarkablePageRequestTarget) target).getPageClass();
    }

    return null;
  }

  public static boolean isBookmarkableRequest(final URL url) {
    // if referer is one of our bookmarkable pages, suggest a link to that
    // page
    final IRequestTarget rt = getRequestTarget(url);
    return rt instanceof IBookmarkablePageRequestTarget;
  }

  public static Class<? extends Page> getBookmarkablePage(final URL url) {
    final IRequestTarget rt = getRequestTarget(url);
    if (rt instanceof IBookmarkablePageRequestTarget) {
      final IBookmarkablePageRequestTarget target = (IBookmarkablePageRequestTarget) rt;
      return target.getPageClass();
    } else {
      return null;
    }
  }

  public static IBookmarkablePageRequestTarget getBookmarkableRequestTarget(final URL url) {
    final IRequestTarget rt = getRequestTarget(url);
    if (rt instanceof IBookmarkablePageRequestTarget) {
      return (IBookmarkablePageRequestTarget) rt;
    } else {
      return null;
    }
  }

  public static IRequestTarget getRequestTarget(final URL url) {
    if (url != null) {
      final RequestCycle rc = RequestCycle.get();
      final IRequestCycleProcessor processor = rc.getProcessor();
      final RequestParameters requestParameters = processor.getRequestCodingStrategy().decode(
          new UrlRequest(rc.getRequest(), url));

      try {
        return processor.resolve(rc, requestParameters);
      } catch (final WicketRuntimeException e) {
        // ignore
      }

    }
    return null;
  }

  public static AbstractLink getBookmarkableRefererLink(final String id, final IModel<String> labelModel) {
    final String referer = getReferer();
    if (referer == null) {
      return null;
    }
    try {
      if (isBookmarkableRequest(new URL(referer))) {
        return new ExternalLink(id, new Model<String>(referer), labelModel);
      }
    } catch (final MalformedURLException e) {
      log.warn("malformed referer url: " + referer + " (" + e.toString() + ")");
    }
    return null;
  }

  public static String getReferer() {
    return getHttpServletRequest().getHeader("Referer");
  }

  public static class UrlRequest extends Request {
    private final ValueMap params = new ValueMap();

    private final Request realRequest;

    private final URL url;

    /**
     * Construct.
     *
     * @param realRequest
     * @param url
     */
    public UrlRequest(final Request realRequest, final URL url) {
      this.realRequest = realRequest;
      this.url = url;

      final String query = url.getQuery();
      if (query != null) {
        RequestUtils.decodeParameters(query, params);
      }
    }

    /**
     * @see org.apache.wicket.Request#getLocale()
     */
    @Override
    public Locale getLocale() {
      return realRequest.getLocale();
    }

    /**
     * @see org.apache.wicket.Request#getParameter(java.lang.String)
     */
    @Override
    public String getParameter(final String key) {
      return (String) params.get(key);
    }

    /**
     * @see org.apache.wicket.Request#getParameterMap()
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public Map getParameterMap() {
      return params;
    }

    /**
     * @see org.apache.wicket.Request#getParameters(java.lang.String)
     */
    @Override
    public String[] getParameters(final String key) {
      final String param = (String) params.get(key);
      if (param != null) {
        return new String[] { param };
      }
      return new String[0];
    }

    /**
     * @see org.apache.wicket.Request#getPath()
     */
    @Override
    public String getPath() {
      String path = url.getPath();
      if (path.startsWith("/")) {
        path = path.substring(1);
      }
      return path;
    }

    @Override
    public String getRelativePathPrefixToContextRoot() {
      throw new NotImplementedException();
    }

    @Override
    public String getRelativePathPrefixToWicketHandler() {
      throw new NotImplementedException();
    }

    /**
     * @see org.apache.wicket.Request#getURL()
     */
    @Override
    public String getURL() {
      return url.toString();
    }

    @Override
    public String getQueryString() {
      return realRequest.getQueryString();
    }
  }

  public static String getRequested() {
    final HttpServletRequest req = getHttpServletRequest();
    final StringBuilder buf = new StringBuilder();
    buf.append(req.getServletPath());
    final String path = req.getPathInfo();
    if (path != null) {
      buf.append(path);
    }
    final String query = req.getQueryString();
    if (query != null) {
      buf.append("?").append(query);
    }
    return buf.toString();
  }

  /**
   * @return may return null
   */
  public static HttpServletRequest getHttpServletRequest() {
    WebRequest wr = getWebRequest();
    return wr == null ? null : wr.getHttpServletRequest();
  }

  /**
   * @return may return null
   */
  public static HttpServletResponse getHttpServletResponse() {
    WebResponse wr = getWebResponse();
    return wr == null ? null : wr.getHttpServletResponse();
  }

  /**
   * @return may return null
   */
  public static HttpSession getHttpSession() {
    HttpServletRequest r = getHttpServletRequest();
    return r == null ? null : r.getSession();
  }

  public static String getRemoteAddr() {
    return getHttpServletRequest().getRemoteAddr();
  }

  public static String getRequestParameter(final String name) {
    return getHttpServletRequest().getParameter(name);
  }

  /**
   * @return may return null
   */
  public static Request getRequest() {
    final RequestCycle rc = RequestCycle.get();
    return rc == null ? null : rc.getRequest();
  }

  /**
   * @return may return null
   */
  public static WebRequest getWebRequest() {
    final Request request = getRequest();
    return request instanceof WebRequest ? (WebRequest) request : null;
  }

  public static WebRequestCycle getWebRequestCycle() {
    final RequestCycle rc = RequestCycle.get();
    return rc instanceof WebRequestCycle ? (WebRequestCycle) rc : null;
  }

  /**
   * @return may return null
   */
  public static Response getResponse() {
    final RequestCycle rc = RequestCycle.get();
    return rc == null ? null : rc.getResponse();
  }

  /**
   * @return may return null
   */
  public static WebResponse getWebResponse() {
    final Response response = getResponse();
    return response instanceof WebResponse ? (WebResponse) response : null;
  }

  public static boolean isHttps() {
    return "https".equalsIgnoreCase(getHttpServletRequest().getScheme());
  }

  public static Cookie getCookie(final String name) {
    final Cookie[] cookies = getHttpServletRequest().getCookies();
    if (cookies == null) {
      return null;
    }
    for (final Cookie c : cookies) {
      if (name.equals(c.getName())) {
        return c;
      }
    }
    return null;
  }

  public static void deleteCookie(final String name) {
    final Cookie c = new Cookie(name, "");
    c.setMaxAge(0);
    getHttpServletResponse().addCookie(c);
  }

  public static String getHeader(final String name) {
    final HttpServletRequest r = getHttpServletRequest();
    return r == null ? null : r.getHeader(name);
  }

  public static WebClientInfo getClientInfo() {
    return (WebClientInfo) Session.get().getClientInfo();
  }

  public static String getUserAgent() {
    final WebClientInfo info = getClientInfo();
    return info == null ? null : info.getUserAgent();
  }

  /**
   * @return true if cookies are disabled, false if unknown
   */
  public static boolean isCookiesDisabled() {
    final WebClientInfo info = getClientInfo();
    return info == null || info.getProperties() == null ? false : !info.getProperties().isCookiesEnabled();

  }

  public static String getClientInfoString() {
    final WebClientInfo info = getClientInfo();
    return info == null ? null : info.getUserAgent() + " (" + info.getProperties().getRemoteAddress() + ")";
  }

  public static String getRequestContextPath() {
    final HttpServletRequest r = getHttpServletRequest();
    if (r == null) {
      return null;
    }
    try {
      final URL url = new URL(r.getRequestURL().toString());
      final StringBuilder buf = new StringBuilder(100);

      buf.append(url.getProtocol()).append("://").append(url.getHost());
      if (url.getPort() != -1) {
        buf.append(":").append(url.getPort());
      }
      return buf.append(r.getContextPath()).toString();
    } catch (final MalformedURLException e) {
      throw new WicketRuntimeException("client sent an illegal url?", e);
    }

  }

  public static String getHost() {
    final HttpServletRequest r = getHttpServletRequest();
    if (r == null) {
      return null;
    }
    try {
      return new URL(r.getRequestURL().toString()).getHost();
    } catch (final MalformedURLException e) {
      throw new WicketRuntimeException("client sent an illegal url?", e);
    }
  }

  public static String toAbsolutePath(final Class<? extends Page> pageClass) {
    return toAbsolutePath(pageClass, null);
  }

  public static String toAbsolutePath(final Class<? extends Page> pageClass, final PageParameters parameters) {
    return RequestUtils.toAbsolutePath(RequestCycle.get().urlFor(pageClass, parameters).toString());
  }

  public static void performTemporaryRedirect(String targetURL) {
    performRedirect(targetURL, HttpServletResponse.SC_MOVED_TEMPORARILY);
  }

  public static void performPermanentRedirect(String targetURL) {
    performRedirect(targetURL, HttpServletResponse.SC_MOVED_PERMANENTLY);
  }

  public static void performRedirect(final String targetURL, final int statusCode) {
    final BufferedWebResponse response = (BufferedWebResponse) RequestCycle.get().getResponse();
    response.getHttpServletResponse().setHeader("Location", targetURL);
    throw new AbortWithHttpStatusException(statusCode, true);
  }

  public static void performRedirect(final Class<? extends Page> pageClass, final PageParameters parameters,
      final int statusCode) {
    performRedirect(toAbsolutePath(pageClass, parameters), statusCode);
  }

  public static URL toUrl(final Class<? extends Page> pageClass) {
    return toUrl(pageClass, null);
  }

  public static URL toUrl(final Class<? extends Page> pageClass, final PageParameters params) {
    final String url = toAbsolutePath(pageClass, params);
    try {
      return new URL(url);
    } catch (final MalformedURLException e) {
      throw new WicketRuntimeException("failed to create URL from " + url, e);
    }
  }

  /**
   * @return <code>true</code> if header "Wicket-Ajax" is set
   * @see ServletWebRequest#isAjax()
   */
  public static boolean isAjax() {
    Request req = getRequest();
    if (req instanceof ServletWebRequest) {
      return ((ServletWebRequest) req).isAjax();
    } else {
      return false;
    }
  }

  public static boolean isDeployment() {
    // should this be cached?
    return Application.DEPLOYMENT.equals(Application.get().getConfigurationType());
  }
}
TOP

Related Classes of at.molindo.wicketutils.utils.WicketUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.