/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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.apache.logging.log4j.core.lookup;

import org.apache.logging.log4j.core.LogEvent;

/**
 * Lookup a String key to a String value.
 * <p>
 * This class represents the simplest form of a string to string map.
 * It has a benefit over a map in that it can create the result on
 * demand based on the key.
 * <p>
 * This class comes complete with various factory methods.
 * If these do not suffice, you can subclass and implement your own matcher.
 * <p>
 * For example, it would be possible to implement a lookup that used the
 * key as a primary key, and looked up the value on demand from the database
 *
 * @version $Id$
 */
public interface StrLookup {
    /**
     * Looks up a String key to a String value.
     * <p>
     * The internal implementation may use any mechanism to return the value.
     * The simplest implementation is to use a Map. However, virtually any
     * implementation is possible.
     * <p>
     * For example, it would be possible to implement a lookup that used the
     * key as a primary key, and looked up the value on demand from the database
     * Or, a numeric based implementation could be created that treats the key
     * as an integer, increments the value and return the result as a string -
     * converting 1 to 2, 15 to 16 etc.
     * <p>
     * The {@link #lookup(String)} method always returns a String, regardless of
     * the underlying data, by converting it as necessary. For example:
     * <pre>
     * Map<String, Object> map = new HashMap<String, Object>();
     * map.put("number", new Integer(2));
     * assertEquals("2", StrLookup.mapLookup(map).lookup("number"));
     * </pre>
     * @param key  the key to be looked up, may be null
     * @return the matching value, null if no match
     */
    String lookup(String key);

    /**
     * Looks up a String key to a String value possibly using the current LogEvent.
     * <p>
     * The internal implementation may use any mechanism to return the value.
     * The simplest implementation is to use a Map. However, virtually any
     * implementation is possible.
     * <p>
     * For example, it would be possible to implement a lookup that used the
     * key as a primary key, and looked up the value on demand from the database
     * Or, a numeric based implementation could be created that treats the key
     * as an integer, increments the value and return the result as a string -
     * converting 1 to 2, 15 to 16 etc.
     * <p>
     * The {@link #lookup(String)} method always returns a String, regardless of
     * the underlying data, by converting it as necessary. For example:
     * <pre>
     * Map<String, Object> map = new HashMap<String, Object>();
     * map.put("number", new Integer(2));
     * assertEquals("2", StrLookup.mapLookup(map).lookup("number"));
     * </pre>
     * @param event The current LogEvent.
     * @param key  the key to be looked up, may be null
     * @return the matching value, null if no match
     */
    String lookup(LogEvent event, String key);
}

@@ -1107,16 +1107,24 @@
 he key.%0A
+ * %3C/p%3E%0A
  * %3Cp%3E%0A 
@@ -1258,16 +1258,24 @@
 atcher.%0A
+ * %3C/p%3E%0A
  * %3Cp%3E%0A 
@@ -1429,25 +1429,13 @@
 e%0A *
-%0A * @version $Id$
+ %3C/p%3E
 %0A */
@@ -1711,32 +1711,44 @@
 on is possible.%0A
+     * %3C/p%3E%0A
      * %3Cp%3E%0A     
@@ -2110,45 +2110,34 @@
  * %3C
-p%3E%0A     * The %7B@link #lookup(String)%7D
+/p%3E%0A     * %3Cp%3E%0A     * This
  met
@@ -2243,32 +2243,44 @@
 y. For example:%0A
+     * %3C/p%3E%0A
      * %3Cpre%3E%0A   
@@ -2278,33 +2278,36 @@
 %3Cpre%3E%0A     * Map
-%3C
+&lt;
 String, Object%3E 
@@ -2296,33 +2296,36 @@
 t;String, Object
-%3E
+&gt;
  map = new HashM
@@ -2318,33 +2318,36 @@
 ap = new HashMap
-%3C
+&lt;
 String, Object%3E(
@@ -2336,33 +2336,36 @@
 t;String, Object
-%3E
+&gt;
 ();%0A     * map.p
@@ -2908,32 +2908,44 @@
 on is possible.%0A
+     * %3C/p%3E%0A
      * %3Cp%3E%0A     
@@ -3307,45 +3307,34 @@
  * %3C
-p%3E%0A     * The %7B@link #lookup(String)%7D
+/p%3E%0A     * %3Cp%3E%0A     * This
  met
@@ -3440,32 +3440,44 @@
 y. For example:%0A
+     * %3C/p%3E%0A
      * %3Cpre%3E%0A   
@@ -3483,17 +3483,20 @@
    * Map
-%3C
+&lt;
 String, 
@@ -3501,17 +3501,20 @@
 , Object
-%3E
+&gt;
  map = n
@@ -3523,17 +3523,20 @@
  HashMap
-%3C
+&lt;
 String, 
@@ -3541,17 +3541,20 @@
 , Object
-%3E
+&gt;
 ();%0A    

Fix javadoc markup.