001/** 002 * Copyright (C) 2006-2025 Talend Inc. - www.talend.com 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.talend.sdk.component.runtime.internationalization; 017 018import java.util.Objects; 019import java.util.Optional; 020import java.util.ResourceBundle; 021import java.util.stream.Stream; 022 023public class ParameterBundle extends InternalBundle { 024 025 private final String[] simpleNames; 026 027 public ParameterBundle(final ResourceBundle[] bundles, final String prefix, final String... simpleNames) { 028 super(bundles, prefix); 029 this.simpleNames = simpleNames; 030 } 031 032 public Optional<String> documentation(final ParameterBundle parent) { 033 return get(parent, "_documentation", false); 034 } 035 036 public Optional<String> displayName(final ParameterBundle parent) { 037 return get(parent, "_displayName", false); 038 } 039 040 public Optional<String> enumDisplayName(final ParameterBundle parent, final String enumName) { 041 return get(parent, enumName + "._displayName", true); 042 } 043 044 public Optional<String> placeholder(final ParameterBundle parent) { 045 return get(parent, "_placeholder", false); 046 } 047 048 public Optional<String> gridLayoutName(final ParameterBundle parent, final String tabName) { 049 return get(parent, "_gridlayout." + tabName + "._displayName", false); 050 } 051 052 private Optional<String> get(final ParameterBundle parentBundle, final String suffix, 053 final boolean stripLastSegment) { 054 Optional<String> v = readValue(suffix); 055 if (!v.isPresent()) { 056 v = Stream 057 .of(simpleNames) 058 .map(s -> !stripLastSegment || s.lastIndexOf('.') < 0 ? s : s.substring(0, s.lastIndexOf('.'))) 059 .map(s -> { 060 final String k = s + "." + suffix; 061 return readRawValue(k) 062 .orElse(parentBundle == null ? null : parentBundle.readRawValue(k).orElse(null)); 063 }) 064 .filter(Objects::nonNull) 065 .findFirst(); 066 } 067 068 return v; 069 } 070}