Example #1
0
  @GET
  @Path("device-groupings")
  public Response getDeviceGroupingCounts(
      @QueryParam("connectivity-status") String connectivityStatus,
      @QueryParam("potential-vulnerability") String potentialVulnerability,
      @QueryParam("platform") String platform,
      @QueryParam("ownership") String ownership) {

    Map<String, Object> filters = new LinkedHashMap<>();
    Message message = new Message();
    if (connectivityStatus != null) {
      if ("ACTIVE".equals(connectivityStatus)
          || "INACTIVE".equals(connectivityStatus)
          || "REMOVED".equals(connectivityStatus)) {
        filters.put("CONNECTIVITY_STATUS", connectivityStatus);
      } else {
        message.setErrorMessage("Invalid value for connectivity-status query parameter.");
        message.setDescription(
            "connectivity-status query parameter value could only be either ACTIVE, INACTIVE or REMOVED.");
        return Response.status(HttpStatus.SC_BAD_REQUEST).entity(message).build();
      }
    }

    if (potentialVulnerability != null) {
      if ("non-compliant".equals(potentialVulnerability)
          || "unmonitored".equals(potentialVulnerability)) {
        if ("non-compliant".equals(potentialVulnerability)) {
          filters.put("IS_COMPLIANT", 0);
        } else {
          filters.put("POLICY_ID", -1);
        }
      } else {
        message.setErrorMessage("Invalid value for potential-vulnerability query parameter.");
        message.setDescription(
            "potential-vulnerability query parameter value could only be either non-compliant or unmonitored.");
        return Response.status(HttpStatus.SC_BAD_REQUEST).entity(message).build();
      }
    }

    if (platform != null) {
      if ("android".equals(platform) || "ios".equals(platform) || "windows".equals(platform)) {
        filters.put("PLATFORM", platform);
      } else {
        message.setErrorMessage("Invalid value for platform query parameter.");
        message.setDescription(
            "platform query parameter value could only be either android, ios or windows.");
        return Response.status(HttpStatus.SC_BAD_REQUEST).entity(message).build();
      }
    }

    if (ownership != null) {
      if ("BYOD".equals(ownership) || "COPE".equals(ownership)) {
        filters.put("OWNERSHIP", ownership);
      } else {
        message.setErrorMessage("Invalid value for ownership query parameter.");
        message.setDescription(
            "ownership query parameter value could only be either BYOD or COPE.");
        return Response.status(HttpStatus.SC_BAD_REQUEST).entity(message).build();
      }
    }

    GadgetDataService gadgetDataService = MDMAPIUtils.getGadgetDataService();

    // creating device-Counts-by-platforms Data Wrapper
    Map<String, Integer> deviceCountsByPlatforms =
        gadgetDataService.getDeviceCountsByPlatforms(filters);
    if (deviceCountsByPlatforms == null) {
      return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build();
    }

    Map<String, Object> deviceCountByPlatformDataWrapper;
    List<Map<String, Object>> deviceCountsByPlatformsDataWrapper = new ArrayList<>();
    for (Map.Entry<String, Integer> entry : deviceCountsByPlatforms.entrySet()) {
      deviceCountByPlatformDataWrapper = new LinkedHashMap<>();
      deviceCountByPlatformDataWrapper.put("group", entry.getKey());
      deviceCountByPlatformDataWrapper.put("label", entry.getKey());
      deviceCountByPlatformDataWrapper.put("count", entry.getValue());
      deviceCountsByPlatformsDataWrapper.add(deviceCountByPlatformDataWrapper);
    }

    DashboardGadgetDataWrapper dashboardGadgetDataWrapper1 = new DashboardGadgetDataWrapper();
    dashboardGadgetDataWrapper1.setContext("platform");
    dashboardGadgetDataWrapper1.setData(deviceCountsByPlatformsDataWrapper);

    // creating device-Counts-by-ownership-types Data Wrapper
    Map<String, Integer> deviceCountsByOwnershipTypes =
        gadgetDataService.getDeviceCountsByOwnershipTypes(filters);
    if (deviceCountsByOwnershipTypes == null) {
      return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).build();
    }

    Map<String, Object> deviceCountByOwnershipTypeDataWrapper;
    List<Map<String, Object>> deviceCountsByOwnershipTypesDataWrapper = new ArrayList<>();
    for (Map.Entry<String, Integer> entry : deviceCountsByOwnershipTypes.entrySet()) {
      deviceCountByOwnershipTypeDataWrapper = new LinkedHashMap<>();
      deviceCountByOwnershipTypeDataWrapper.put("group", entry.getKey());
      deviceCountByOwnershipTypeDataWrapper.put("label", entry.getKey());
      deviceCountByOwnershipTypeDataWrapper.put("count", entry.getValue());
      deviceCountsByOwnershipTypesDataWrapper.add(deviceCountByOwnershipTypeDataWrapper);
    }

    DashboardGadgetDataWrapper dashboardGadgetDataWrapper2 = new DashboardGadgetDataWrapper();
    dashboardGadgetDataWrapper2.setContext("ownership");
    dashboardGadgetDataWrapper2.setData(deviceCountsByOwnershipTypesDataWrapper);

    List<DashboardGadgetDataWrapper> responsePayload = new ArrayList<>();
    responsePayload.add(dashboardGadgetDataWrapper1);
    responsePayload.add(dashboardGadgetDataWrapper2);

    return Response.status(HttpStatus.SC_OK).entity(responsePayload).build();
  }