1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache license, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the license for the specific language governing permissions and 15 * limitations under the license. 16 */ 17 package org.apache.logging.log4j.message; 18 19 import java.util.ResourceBundle; 20 21 /** 22 * Creates {@link FormattedMessage} instances for {@link MessageFactory2} methods (and {@link MessageFactory} by 23 * extension.) 24 * 25 * <h4>Note to implementors</h4> 26 * <p> 27 * This class does <em>not</em> implement any {@link MessageFactory2} methods and lets the superclass funnel those calls 28 * through {@link #newMessage(String, Object...)}. 29 * </p> 30 */ 31 public class LocalizedMessageFactory extends AbstractMessageFactory { 32 private static final long serialVersionUID = -1996295808703146741L; 33 34 // FIXME: cannot use ResourceBundle name for serialization until Java 8 35 private transient final ResourceBundle resourceBundle; 36 private final String baseName; 37 38 public LocalizedMessageFactory(final ResourceBundle resourceBundle) { 39 this.resourceBundle = resourceBundle; 40 this.baseName = null; 41 } 42 43 public LocalizedMessageFactory(final String baseName) { 44 this.resourceBundle = null; 45 this.baseName = baseName; 46 } 47 48 /** 49 * Gets the resource bundle base name if set. 50 * 51 * @return the resource bundle base name if set. May be null. 52 */ 53 public String getBaseName() { 54 return this.baseName; 55 } 56 57 /** 58 * Gets the resource bundle if set. 59 * 60 * @return the resource bundle if set. May be null. 61 */ 62 public ResourceBundle getResourceBundle() { 63 return this.resourceBundle; 64 } 65 66 /** 67 * @since 2.8 68 */ 69 @Override 70 public Message newMessage(final String key) { 71 if (resourceBundle == null) { 72 return new LocalizedMessage(baseName, key); 73 } 74 return new LocalizedMessage(resourceBundle, key); 75 } 76 77 /** 78 * Creates {@link LocalizedMessage} instances. 79 * 80 * @param key The key String, used as a message if the key is absent. 81 * @param params The parameters for the message at the given key. 82 * @return The LocalizedMessage. 83 * 84 * @see org.apache.logging.log4j.message.MessageFactory#newMessage(String, Object...) 85 */ 86 @Override 87 public Message newMessage(final String key, final Object... params) { 88 if (resourceBundle == null) { 89 return new LocalizedMessage(baseName, key, params); 90 } 91 return new LocalizedMessage(resourceBundle, key, params); 92 } 93 94 }