/** * Creates a new instance where each translation value is transformed with {@code function}. * * {@include.example io.sphere.sdk.models.LocalizedStringTest#mapValue()} * * @param function transforms a value for a locale into a new value * @return a new {@link LocalizedString} which consist all elements for this transformed with {@code function} */ public LocalizedString mapValue(final BiFunction<Locale, String, String> function) { return stream().map(entry -> { final String newValue = function.apply(entry.getLocale(), entry.getValue()); return LocalizedStringEntry.of(entry.getLocale(), newValue); }).collect(streamCollector()); }
public static LocalizedStringEntry of(final Locale locale, final String value) { return new LocalizedStringEntry(locale, value); }
/** * Collector to collect a stream of {@link LocalizedStringEntry}s to one {@link LocalizedString}. * * {@include.example io.sphere.sdk.models.LocalizedStringTest#streamAndCollector()} * * @return collector */ public static Collector<LocalizedStringEntry, ?, LocalizedString> streamCollector() { final Collector<LocalizedStringEntry, Map<Locale, String>, LocalizedString> result = Collector.of(HashMap::new, (Map<Locale, String> tmpMap, LocalizedStringEntry entry) -> tmpMap.put(entry.getLocale(), entry.getValue()), (Map<Locale, String> left, Map<Locale, String> right) -> { left.putAll(right); return left; }, (Map<Locale, String> entryMap) -> LocalizedString.of(entryMap)); return result; }
/** * Creates an entry for language tag and a value. * * <p>The language tag can be just a language code</p> * {@include.example io.sphere.sdk.models.LocalizedStringEntryTest#ofLanguageTagAndValueForLanguage()} * <p>or language and a country</p> * {@include.example io.sphere.sdk.models.LocalizedStringEntryTest#ofLanguageTagAndValueForLanguageTag()} * * @param languageTag language tag as in {@link Locale#forLanguageTag(String)} * @param value value of this entry * @return entry */ public static LocalizedStringEntry of(final String languageTag, final String value) { final Locale locale = Locale.forLanguageTag(languageTag); return of(locale, value); }
@Test public void slugifyUnique() throws Exception { final LocalizedString actual = LocalizedString.of(Locale.GERMAN, "Aa -A_", Locale.ENGLISH, "dog food").slugifiedUnique(); assertThat(actual.stream().allMatch(entry -> entry.getValue().matches("[\\w-]+-\\d{6,14}"))).isTrue(); }
private String queryParametersToString(final boolean urlEncoded) { final UrlQueryBuilder builder = UrlQueryBuilder.of(); searchKeywords.forEach(entry -> builder.add("searchKeywords." + entry.getLocale().toLanguageTag(), entry.getValue(), urlEncoded)); Optional.ofNullable(limit).ifPresent(presentLimit -> builder.add("limit", Integer.toString(presentLimit), urlEncoded)); Optional.ofNullable(staged).ifPresent(presentStaged -> builder.add("staged", Boolean.toString(presentStaged), urlEncoded)); Optional.ofNullable(fuzzy).ifPresent(presentStaged -> builder.add("fuzzy", Boolean.toString(presentStaged), urlEncoded)); return builder.build(); }
@Override public Optional<Category> findBySlug(final Locale locale, final String slug) { return Optional.ofNullable(categoriesByLocaleAndSlug.get(LocalizedStringEntry.of(locale, slug))); }
private String queryParametersToString(final boolean urlEncoded) { final UrlQueryBuilder builder = UrlQueryBuilder.of(); searchKeywords.forEach(entry -> builder.add("searchKeywords." + entry.getLocale().toLanguageTag(), entry.getValue(), urlEncoded)); Optional.ofNullable(limit).ifPresent(presentLimit -> builder.add("limit", Integer.toString(presentLimit), urlEncoded)); Optional.ofNullable(staged).ifPresent(presentStaged -> builder.add("staged", Boolean.toString(presentStaged), urlEncoded)); return builder.build(); }
@Override public Optional<Category> findBySlug(final Locale locale, final String slug) { return Optional.ofNullable(categoriesByLocaleAndSlug.get(LocalizedStringEntry.of(locale, slug))); }
private String queryParametersToString(final boolean urlEncoded) { final UrlQueryBuilder builder = UrlQueryBuilder.of(); searchKeywords.forEach(entry -> builder.add("searchKeywords." + entry.getLocale().toLanguageTag(), entry.getValue(), urlEncoded)); Optional.ofNullable(limit).ifPresent(presentLimit -> builder.add("limit", Integer.toString(presentLimit), urlEncoded)); Optional.ofNullable(staged).ifPresent(presentStaged -> builder.add("staged", Boolean.toString(presentStaged), urlEncoded)); Optional.ofNullable(fuzzy).ifPresent(presentStaged -> builder.add("fuzzy", Boolean.toString(presentStaged), urlEncoded)); return builder.build(); }
@Override public Optional<Category> findBySlug(final Locale locale, final String slug) { return Optional.ofNullable(categoriesByLocaleAndSlug.get(LocalizedStringEntry.of(locale, slug))); }
@Test public void stream() throws Exception { final LocalizedString upperCased = LocalizedString.of(Locale.GERMAN, "Hundefutter", Locale.ENGLISH, "dog food") .stream() .map(e -> LocalizedStringEntry.of(e.getLocale(), e.getValue().toUpperCase())) .collect(LocalizedString.streamCollector()); assertThat(upperCased).isEqualTo(LocalizedString.of(Locale.GERMAN, "HUNDEFUTTER", Locale.ENGLISH, "DOG FOOD")); }
String queryParametersToString(final boolean urlEncoded) { final UrlQueryBuilder builder = UrlQueryBuilder.of(); Optional.ofNullable(text()).ifPresent(t -> builder.add(TEXT + "." + t.getLocale().toLanguageTag(), t.getValue(), urlEncoded)); facets().forEach(f -> builder.add(FACET, f.expression(), urlEncoded)); Optional.ofNullable(isFuzzy()).ifPresent(b -> builder.add(FUZZY, b.toString(), urlEncoded)); Optional.ofNullable(fuzzyLevel()).ifPresent(b -> builder.add(FUZZY_LEVEL, b.toString(), urlEncoded)); resultFilters().forEach(f -> builder.add(FILTER_RESULTS, f.expression(), urlEncoded)); queryFilters().forEach(f -> builder.add(FILTER_QUERY, f.expression(), urlEncoded)); facetFilters().forEach(f -> builder.add(FILTER_FACETS, f.expression(), urlEncoded)); facetedSearch().forEach(f -> { builder.add(FACET, f.facetExpression().expression(), urlEncoded); f.filterExpressions().forEach(filter -> { builder.add(FILTER_RESULTS, filter.expression(), urlEncoded); builder.add(FILTER_FACETS, filter.expression(), urlEncoded); }); }); sort().forEach(s -> builder.add(SORT, s.expression(), urlEncoded)); if (!facets().isEmpty() || !facetedSearch().isEmpty()) { builder.add("formatBooleanFacet", Boolean.TRUE.toString(), urlEncoded); } Optional.ofNullable(limit()).ifPresent(l -> builder.add(LIMIT, l.toString(), urlEncoded)); Optional.ofNullable(offset()).ifPresent(o -> builder.add(OFFSET, o.toString(), urlEncoded)); expansionPaths().forEach(path -> builder.add(EXPAND, path.toSphereExpand(), urlEncoded)); additionalQueryParameters().forEach(p -> builder.add(p.getName(), p.getValue(), urlEncoded)); return builder.build(); }
/** * Creates a new Stream of entries. * * {@include.example io.sphere.sdk.models.LocalizedStringTest#streamAndCollector()} * * @return stream of all entries */ public Stream<LocalizedStringEntry> stream() { return translations.entrySet().stream().map(entry -> LocalizedStringEntry.of(entry.getKey(), entry.getValue())); }
@Test public void streamAndCollector() { final LocalizedString ls = LocalizedString.of(Locale.GERMAN, "Company Hundefutter", Locale.ENGLISH, "Company dog food"); final Stream<LocalizedStringEntry> stream = ls.stream(); final LocalizedString updatedLs = stream .map(entry -> { final Locale locale = entry.getLocale(); final String value = entry.getValue(); final String newValue = value.replace("Company ", ""); return LocalizedStringEntry.of(locale, newValue); }) .collect(LocalizedString.streamCollector()); assertThat(updatedLs).isEqualTo(LocalizedString.of(Locale.GERMAN, "Hundefutter", Locale.ENGLISH, "dog food")); }
@Test public void queryByName() throws Exception { withCategory(client(), category -> { final LocalizedStringEntry name = category.getName().stream().findAny().get(); final Query<Category> query = CategoryQuery.of().byName(name.getLocale(), name.getValue()); assertThat(client().executeBlocking(query).head().get().getId()).isEqualTo(category.getId()); }); }
@Override public C withText(final Locale locale, final String text) { final LocalizedStringEntry locStringEntry = LocalizedStringEntry.of(requireNonNull(locale), requireNonNull(text)); return withText(locStringEntry); }
/** * Creates an instance by supplying a map of {@link String} the language tag and {@link String}. Changes to the map won't affect the instance. * * {@include.example io.sphere.sdk.models.LocalizedStringTest#ofStringToStringMap()} * * @param translations the key value pairs for the translation * @return a new instance which has the same key value pairs as {@code translation} at creation time */ @JsonIgnore public static LocalizedString ofStringToStringMap(final Map<String, String> translations) { requireNonNull(translations); return translations.entrySet().stream() .map(localeEntry -> { final Locale locale = Locale.forLanguageTag(localeEntry.getKey()); return LocalizedStringEntry.of(locale, localeEntry.getValue()); }) .collect(LocalizedString.streamCollector()); }