001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017package org.apache.logging.log4j.core.impl;
018
019import org.apache.logging.log4j.message.Message;
020import org.apache.logging.log4j.util.StringBuilderFormattable;
021
022import java.util.Arrays;
023
024/**
025 * <em>Consider this class private.</em>
026 *
027 * {@link MementoMessage} is intended to be used when we need to make an
028 * immutable copy of a {@link Message} without forgetting the original
029 * {@link Message#getFormat()} and {@link Message#getParameters()} values.
030 *
031 * @since 3.0
032 */
033public final class MementoMessage implements Message, StringBuilderFormattable {
034
035    private final String formattedMessage;
036    private final String format;
037    private final Object[] parameters;
038
039    public MementoMessage(final String formattedMessage, final String format, final Object[] parameters) {
040        this.formattedMessage = formattedMessage;
041        this.format = format;
042        this.parameters = parameters;
043    }
044
045    @Override
046    public String getFormattedMessage() {
047        return formattedMessage;
048    }
049
050    @Override
051    public String getFormat() {
052        return format;
053    }
054
055    @Override
056    public Object[] getParameters() {
057        return parameters;
058    }
059
060    /**
061     * Always returns null.
062     *
063     * @return null
064     */
065    @Override
066    public Throwable getThrowable() {
067        return null;
068    }
069
070    @Override
071    public void formatTo(final StringBuilder buffer) {
072        buffer.append(formattedMessage);
073    }
074
075    @Override
076    public String toString() {
077        return "MementoMessage{" +
078                "formattedMessage='" + formattedMessage + '\'' +
079                ", format='" + format + '\'' +
080                ", parameters=" + Arrays.toString(parameters) +
081                '}';
082    }
083}