/**
   * Upload artifact.
   *
   * @param req the req
   * @param response the response
   * @throws ServletException the servlet exception
   * @throws IOException Signals that an I/O exception has occurred.
   */
  private void uploadArtifact(HttpServletRequest req, HttpServletResponse response)
      throws ServletException, IOException {
    // Get the URL request and prepare it to obtain the maven metadata
    // information
    String url = req.getRequestURI();
    String maven_url = ""; // $NON-NLS-1$
    if (url.contains(URL_CONTEXT_STR)) {
      maven_url = url.substring(url.indexOf(URL_CONTEXT_STR) + URL_CONTEXT_STR.length());
    } else {
      maven_url = url;
    }

    if (maven_url.startsWith("/")) { // $NON-NLS-1$
      maven_url = maven_url.substring(1);
    }

    // Extract the relevant content from the POST'd form
    Map<String, String> responseMap = new HashMap<String, String>();

    InputStream content = null;
    // Parse the request
    content = req.getInputStream();

    // Builder class that converts the url into a Maven MetaData Object
    MavenMetaData metadata = MavenMetaDataBuilder.build(maven_url);
    try {
      if (metadata.isArtifact()) {
        if (SNAPSHOT_ALLOWED || !metadata.isSnapshotVersion()) {
          String uuid = service.uploadArtifact(metadata, content);
          responseMap.put("uuid", uuid); // $NON-NLS-1$
        } else {
          response.sendError(
              HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
              Messages.i18n.format("maven.servlet.put.snapshot.not.allowed")); // $NON-NLS-1$
        }

      } else {
        response.sendError(
            HttpServletResponse.SC_BAD_REQUEST,
            Messages.i18n.format("maven.servlet.put.url.without.artifact")); // $NON-NLS-1$
      }

    } catch (Throwable e) {
      logger.error(
          Messages.i18n.format("maven.servlet.artifact.content.put.exception"), e); // $NON-NLS-1$
      response.sendError(
          HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
          Messages.i18n.format("maven.servlet.put.exception")); // $NON-NLS-1$
    } finally {
      if (content != null) {
        IOUtils.closeQuietly(content);
      }
    }
  }
  /**
   * Do get.
   *
   * @param req the req
   * @param resp the resp
   * @throws ServletException the servlet exception
   * @throws IOException Signals that an I/O exception has occurred.
   * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
   *     javax.servlet.http.HttpServletResponse)
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    // Get the URL request and prepare it to obtain the maven metadata
    // information
    String url = req.getRequestURI();
    String maven_url = ""; // $NON-NLS-1$
    if (url.contains(URL_CONTEXT_STR)) {
      maven_url = url.substring(url.indexOf(URL_CONTEXT_STR) + URL_CONTEXT_STR.length());
    } else {
      maven_url = url;
    }

    if (maven_url.startsWith("/")) { // $NON-NLS-1$
      maven_url = maven_url.substring(1);
    }

    // Builder class that converts the url into a Maven MetaData Object
    MavenMetaData metadata = MavenMetaDataBuilder.build(maven_url);

    // If it is possible to detect a maven metadata information and it is
    // found an artifact information
    if (metadata.isArtifact()) {

      // Here we have the gav info. So let's go to Sramp to
      // obtain the InputStream with the info
      MavenArtifactWrapper artifact = null;
      try {
        artifact = service.getArtifactContent(metadata);
        if (artifact != null) {
          resp.setContentLength(artifact.getContentLength());
          resp.addHeader(
              "Content-Disposition", //$NON-NLS-1$
              "attachment; filename=" + artifact.getFileName()); // $NON-NLS-1$
          resp.setContentType(artifact.getContentType());
          IOUtils.copy(artifact.getContent(), resp.getOutputStream());
        } else {
          listItemsResponse(req, resp, maven_url);
        }
      } catch (MavenRepositoryException e) {
        logger.info(
            Messages.i18n.format(
                "maven.servlet.artifact.content.get.exception", //$NON-NLS-1$
                metadata.getGroupId(),
                metadata.getArtifactId(),
                metadata.getVersion(),
                metadata.getFileName()));
        // Send a 500 error if there's an exception
        resp.sendError(500);
      } finally {
        if (artifact != null) {
          IOUtils.closeQuietly(artifact.getContent());
        }
      }

    } else {
      // In case the metadata information is not an artifact, then the
      // maven url is listed
      listItemsResponse(req, resp, maven_url);
    }
  }