/** * A search clause that will match inputs that had metadata that matches the metadata on the given * {@link ClarifaiInput} * * @param input the input whose metadata to search by * @return a {@link SearchClause} to be given to a search endpoint * @see #matchMetadata(JsonObject) */ @NotNull public static SearchClause matchMetadata(@NotNull ClarifaiInput input) { return matchMetadata(input.metadata()); }
/** * @param geo a geographic coordinate to assign to this input * @return a copy of this {@link ClarifaiInput} with its geographic coordinate set to the specified value */ @NotNull public final ClarifaiInput withGeo(@Nullable PointF geo) { return new AutoValue_ClarifaiInput(id(), createdAt(), inputValue(), metadata(), concepts(), geo, regions()); }
@Retry @Test public void t17c_searchInputsWithModel_metadata() { final List<SearchHit> hits = assertSuccess( client.searchInputs(SearchClause.matchMetadata(new JSONObjectBuilder().add("foo", "bar").build())) ).searchHits(); final ClarifaiInput hit = hits.stream() .filter(someHit -> "inputWithMetadata".equals(someHit.input().id())) .findFirst() .orElseThrow(() -> new AssertionError("")) .input(); assertEquals("inputWithMetadata", hit.id()); assertEquals(new JSONObjectBuilder().add("foo", "bar").build(), hit.metadata()); }
@NotNull @Override public JsonElement serialize(@Nullable ClarifaiInput value, @NotNull Gson gson) { if (value == null) { return JsonNull.INSTANCE; } final JSONObjectBuilder builder = new JSONObjectBuilder() .add("id", value.id()); final JSONObjectBuilder data = new JSONObjectBuilder() .add("concepts", toJson(gson, value.concepts(), new TypeToken<List<Concept>>() {})) .add("metadata", value.metadata()); if (value.inputValue() instanceof ClarifaiVideo) { data.add("video", toJson(gson, (ClarifaiVideo) value.inputValue(), ClarifaiVideo.class)); } else { data.add("image", toJson(gson, (ClarifaiImage) value.inputValue(), ClarifaiImage.class)); } if (value.geo() != null) { data.add("geo", new JSONObjectBuilder() .add("geo_point", new JSONObjectBuilder() .add("latitude", value.geo().x()) .add("longitude", value.geo().y()))); } if (value.createdAt() != null) { builder.addIfNotNull("created_at", toJson(gson, value.createdAt(), Date.class)); } builder.add("data", data); return builder.build(); } };
@Retry @Test public void testMergeMetadata() { final String inputID = assertSuccess(client.addInputs() .allowDuplicateURLs(true) .plus(ClarifaiInput.forImage(METRO_NORTH_IMAGE_URL) ) ).get(0).id(); assertNotNull(inputID); final JsonObject newMetadata = assertSuccess( client.addMetadataForInput( inputID, new JSONObjectBuilder() .add("foo", "bar") .build() ) ).metadata(); assertEquals(new JSONObjectBuilder().add("foo", "bar").build(), newMetadata); }