/* * Licensed to Luca Cavanna (the "Author") under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. Elastic Search licenses this * file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.shell; import org.elasticsearch.common.io.Streams; import org.elasticsearch.common.settings.loader.SettingsLoader; import org.elasticsearch.common.settings.loader.SettingsLoaderFactory; import org.elasticsearch.shell.command.Command; import org.elasticsearch.shell.command.ExecutableCommand; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; /** * @author Luca Cavanna * * Provides messages based on a file within the classpath */ public class MessagesProvider { private static final Logger logger = LoggerFactory.getLogger(MessagesProvider.class); static final String MESSAGES_FILE = "/messages.yml"; private static final MessagesProvider MESSAGES_PROVIDER = new MessagesProvider(); static { try { MESSAGES_PROVIDER.load(MESSAGES_FILE); } catch (Exception e) { logger.error("Unable to load help file {} from classpath", MESSAGES_FILE, e); } } private Map<String, String> messages; void load(String resourceName) throws Exception { this.messages = loadFromClasspath(resourceName); } Map<String, String> loadFromClasspath(String resourceName) throws IOException { InputStream is = this.getClass().getResourceAsStream(resourceName); if (is == null) { throw new FileNotFoundException("Unable to find file " + MESSAGES_FILE); } SettingsLoader settingsLoader = SettingsLoaderFactory.loaderFromResource(resourceName); return settingsLoader.load(Streams.copyToString(new InputStreamReader(is, "UTF-8"))); } public static String getMessage(String key) { if (MESSAGES_PROVIDER.messages != null) { String message = MESSAGES_PROVIDER.messages.get(key); if (message != null) { return message; } } return ""; } static String getHelp(String component) { return getMessage("help." + component); } public static String getHelp(Command command) { String[] commandAliases = command.getClass().getAnnotation(ExecutableCommand.class).aliases(); for (String commandAlias : commandAliases) { String helpMessage = getHelp(commandAlias); if (helpMessage != null && helpMessage.trim().length()> 0) { return helpMessage; } } return null; } public static String getHelp(Class<?> clazz, String functionName) { return getHelp(clazz.getSimpleName() + "." + functionName); } }