List<Connector> augmentedWithUsage(final List<Connector> connectors) { ListResult<Integration> integrationListResult = getDataManager().fetchAll(Integration.class); List<Integration> items = integrationListResult.getItems(); final Map<String, Long> connectorUsage = items.stream()// .filter(i -> !i.isDeleted())// .flatMap(i -> i.getUsedConnectorIds().stream())// .collect(Collectors.groupingBy(String::toString, Collectors.counting())); return connectors.stream().map(c -> { final int uses = connectorUsage.getOrDefault(c.getId().get(), 0L).intValue(); return c.builder().uses(uses).build(); }).collect(Collectors.toList()); }
@Override public ListResult<Connector> list(final UriInfo uriInfo) { final List<Connector> connectors = Lister.super.list(uriInfo).getItems().stream() .map(c -> { final ConnectorSummary summary = new ConnectorSummary.Builder().createFrom(c).build(); return c.builder().actionsSummary(summary.getActionsSummary()).build(); }) .collect(Collectors.toList()); return ListResult.of(augmentedWithUsage(connectors)); }
@PUT @Path(value = "/{id}") @Consumes(MediaType.MULTIPART_FORM_DATA) public void update(@NotNull @PathParam("id") @ApiParam(required = true) String id, @MultipartForm ConnectorFormData connectorFormData) { if (connectorFormData.getConnector() == null) { throw new IllegalArgumentException("Missing connector parameter"); } Connector connectorToUpdate = connectorFormData.getConnector(); if (connectorFormData.getIconInputStream() != null) { try(BufferedInputStream iconStream = new BufferedInputStream(connectorFormData.getIconInputStream())) { // URLConnection.guessContentTypeFromStream resets the stream after inspecting the media type so // can continue to be used, rather than being consumed. String guessedMediaType = URLConnection.guessContentTypeFromStream(iconStream); if (!guessedMediaType.startsWith("image/")) { throw new IllegalArgumentException("Invalid file contents for an image"); } MediaType mediaType = MediaType.valueOf(guessedMediaType); Icon.Builder iconBuilder = new Icon.Builder().mediaType(mediaType.toString()); Icon icon = getDataManager().create(iconBuilder.build()); iconDao.write(icon.getId().get(), iconStream); connectorToUpdate = connectorToUpdate.builder().icon("db:" + icon.getId().get()).build(); } catch (IOException e) { throw new IllegalArgumentException("Error while reading multipart request", e); } } getDataManager().update(connectorToUpdate); }
@Override public Connector get(final String id) { final Connector connector = augmentedWithUsage(Getter.super.get(id)); final Optional<String> connectorGroupId = connector.getConnectorGroupId(); if (!connectorGroupId.map(applicationContext::containsBean).orElse(false)) { return connector; } final ConnectorSummary summary = new ConnectorSummary.Builder().createFrom(connector).build(); return connector.builder().actionsSummary(summary.getActionsSummary()).build(); }