content: /*
   * Copyright (c) 2008. All rights reserved.
   */
  package ro.isdc.wro;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import ro.isdc.wro.model.resource.Resource;
  
  
  /**
   * Base Wro Runtime exception. All exceptions will extend this runtime exception.
   *
   * @author Alex Objelean
   * @created Created on Nov 3, 2008
   */
  public class WroRuntimeException
      extends RuntimeException {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;
    private static final Logger LOG = LoggerFactory.getLogger(WroRuntimeException.class);
    private Resource resource;
  
    public WroRuntimeException(final String message, final Throwable cause) {
      super(message, cause);
      LOG.debug(message);
    }
  
    /**
     * @param message
     */
    public WroRuntimeException(final String message) {
      this(message, null);
    }
  
    /**
     * Logs the error of this exception. By default errors are logged with DEBUG level. This method will use ERROR level.
     */
    public WroRuntimeException logError() {
      LOG.error(getMessage());
      return this;
    }
  
    /**
     * Wraps original exception into {@link WroRuntimeException} and throw it.
     *
     * @param e
     *          the exception to wrap.
     */
    public static WroRuntimeException wrap(final Exception e) {
      return wrap(e, e.getMessage());
    }
  
    /**
     * Wraps original exception into {@link WroRuntimeException} and throw it.
     *
     * @param e
     *          the exception to wrap.
     * @param message
     *          the message of the exception to wrap.
     */
    public static WroRuntimeException wrap(final Exception e, final String message) {
      if (e instanceof WroRuntimeException) {
        return (WroRuntimeException) e;
      }
      return new WroRuntimeException(message, e);
    }
  
    /**
     * @param resourceUri
     *          The name of the resource being processed when exception occurs.
     */
    public WroRuntimeException setResource(final Resource resource) {
      this.resource = resource;
      return this;
    }
  
    /**
     * @return The processed {@link Resource} which caused the exception.
     */
    public Resource getResource() {
      return resource;
    }
  }
  