Package com.redhat.gss.redhat_support_lib.infrastructure

Source Code of com.redhat.gss.redhat_support_lib.infrastructure.Cases

package com.redhat.gss.redhat_support_lib.infrastructure;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.core.MultivaluedMap;

import org.apache.log4j.Logger;

import com.redhat.gss.redhat_support_lib.errors.RequestException;
import com.redhat.gss.redhat_support_lib.helpers.FilterHelper;
import com.redhat.gss.redhat_support_lib.helpers.QueryBuilder;
import com.redhat.gss.redhat_support_lib.parsers.Case;
import com.redhat.gss.redhat_support_lib.parsers.Values;
import com.redhat.gss.redhat_support_lib.parsers.Values.Value;
import com.redhat.gss.redhat_support_lib.web.ConnectionManager;

import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class Cases extends BaseQuery {
  private final static Logger LOGGER = Logger
      .getLogger(Cases.class.getName());
  ConnectionManager connectionManager = null;
  static String url = "/rs/cases/";

  public Cases(ConnectionManager connectionManager) {
    this.connectionManager = connectionManager;
  }

  /**
   * Queries the API for the given case number. RESTful method:
   * https://api.access.redhat.com/rs/cases/<caseNumber>
   *
   * @param caseNum
   *            The exact caseNumber you are interested in.
   * @return A case object that represents the given case number.
   * @throws RequestException
   *             An exception if there was a connection related issue.
   * @throws MalformedURLException
   */
  public Case get(String caseNum) throws RequestException,
      MalformedURLException {
    WebResource webResource = connectionManager.getConnection().resource(
        connectionManager.getConfig().getUrl() + url + caseNum);
    return get(webResource, Case.class);
  }

  /**
   * Queries the cases RESTful interface with a given set of keywords. RESTful
   * method: https://api.access.redhat.com/rs/cases?keyword=NFS
   *
   * @param keywords
   *            A string array of keywords to search on.
   * @param includeClosed
   *            Do not include closed cases.
   * @param detail
   *            Include additional details.
   * @param group
   *            See https://api.access.redhat.com/rs/groups
   * @param startDate
   *            Must be either: yyyy-MM-ddTHH:mm:ss or yyyy-MM-dd
   * @param endDate
   *            Must be either: yyyy-MM-ddTHH:mm:ss or yyyy-MM-dd
   * @param kwargs
   *            Additional properties to filter on. The RESTful interface can
   *            only search on keywords; however, you can use this method to
   *            post-filter the results returned. Simply supply a String array
   *            of valid properties and their associated values.
   * @return A list of solution objects
   * @throws RequestException
   *             An exception if there was a connection related issue.
   * @throws MalformedURLException
   */

  public List<Case> list(String[] keywords, boolean includeClosed,
      boolean detail, String group, String startDate, String endDate,
      String count, String start, String[] kwargs)
      throws RequestException, MalformedURLException {

    StringBuilder xmlString = new StringBuilder();
    xmlString
        .append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><caseFilter xmlns=\"http://www.redhat.com/gss/strata\">");
    if (keywords != null) {
      for (String keyword : keywords) {
        xmlString.append("<keyword>");
        xmlString.append(keyword);
        xmlString.append("</keyword>");
      }
    }
    if (includeClosed) {
      xmlString.append("<includeClosed>true</includeClosed>");
    }
    if (group != null) {
      xmlString.append("<groupNumber>");
      xmlString.append(group);
      xmlString.append("</groupNumber>");
    } else {
      xmlString.append("<onlyUngrouped>");
      xmlString.append("true");
      xmlString.append("</onlyUngrouped>");
    }
    if (startDate != null) {
      xmlString.append("<startDate>");
      xmlString.append(startDate);
      xmlString.append("</startDate>");
    }
    if (endDate != null) {
      xmlString.append("<endDate>");
      xmlString.append(endDate);
      xmlString.append("</endDate>");
    }
    if (count != null) {
      xmlString.append("<count>");
      xmlString.append(count);
      xmlString.append("</count>");
    }
    if (start != null) {
      xmlString.append("<start>");
      xmlString.append(start);
      xmlString.append("</start>");
    }

    xmlString.append("<ownerSSOName>");
    xmlString.append(connectionManager.getConfig().getUsername());
    xmlString.append("</ownerSSOName>");

    xmlString.append("</caseFilter>");

    List<String> queryParams = new ArrayList<String>();
    if (detail) {
      queryParams.add("detail=true");
    }

    WebResource webResource = connectionManager.getConnection().resource(
        QueryBuilder.appendQuery(connectionManager.getConfig().getUrl()
            + url + "filter", queryParams));
    com.redhat.gss.redhat_support_lib.parsers.Cases cases = add(
        webResource, xmlString.toString(),
        com.redhat.gss.redhat_support_lib.parsers.Cases.class);
    return (List<Case>) FilterHelper.filterResults(cases.getCase(), kwargs);
  }

  /**
   * Add a new case
   *
   * @param cas
   *            The case to be added. Use InstanceMaker.makeCase to get a case
   *            bean.
   * @return The same case with the case number and view_uri set if
   *         successful.
   * @throws Exception
   *             An exception if there was a connection related issue.
   */
  public Case add(Case cas) throws Exception {

    WebResource webResource = connectionManager.getConnection().resource(
        connectionManager.getConfig().getUrl() + url);
    ClientResponse resp = add(webResource, cas);
    MultivaluedMap<String, String> headers = resp.getHeaders();
    URL caseurl = null;
    try {
      caseurl = new URL(headers.getFirst("Location"));
    } catch (MalformedURLException e) {
      LOGGER.debug("Failed : Adding case " + cas.getSummary()
          + " was unsuccessful.");
      throw new Exception();
    }
    String path = caseurl.getPath();
    cas.setCaseNumber(path.substring(path.lastIndexOf('/') + 1,
        path.length()));
    cas.setViewUri(caseurl.toString());
    return cas;
  }

  /**
   * Add a new case
   *
   * @param cas
   *            The case to be added.
   * @return The same case with the case number and view_uri set if
   *         successful.
   * @throws RequestException
   *             An exception if there was a connection related issue.
   * @throws MalformedURLException
   */
  public Case update(Case cas) throws RequestException, MalformedURLException {

    WebResource webResource = connectionManager.getConnection().resource(
        connectionManager.getConfig().getUrl() + url
            + cas.getCaseNumber());
    ClientResponse resp = update(webResource, cas);
    return cas;
  }

  /**
   * Add a new case
   *
   * @param cas
   *            The case to be added.
   * @return The same case with the case number and view_uri set if
   *         successful.
   * @throws RequestException
   *             An exception if there was a connection related issue.
   * @throws MalformedURLException
   */
  public List<Value> getSeverities() throws RequestException,
      MalformedURLException {

    WebResource webResource = connectionManager.getConnection().resource(
        connectionManager.getConfig().getUrl()
            + "/rs/values/case/severity");
    Values values = get(webResource, Values.class);
    return values.getValue();
  }
}
TOP

Related Classes of com.redhat.gss.redhat_support_lib.infrastructure.Cases

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.