JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / org / apache / log4j / rewrite / MapRewritePolicy.java
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.log4j.rewrite;
18
19 import java.util.HashMap;
20 import java.util.Iterator;
21 import java.util.Map;
22
23 import org.apache.log4j.Logger;
24 import org.apache.log4j.spi.LoggingEvent;
25
26 /**
27  * This policy rewrites events where the message of the
28  * original event implementes java.util.Map.
29  * All other events are passed through unmodified.
30  * If the map contains a "message" entry, the value will be
31  * used as the message for the rewritten event.  The rewritten
32  * event will have a property set that is the combination of the
33  * original property set and the other members of the message map.
34  * If both the original property set and the message map
35  * contain the same entry, the value from the message map
36  * will overwrite the original property set.
37  *
38  * The combination of the RewriteAppender and this policy
39  * performs the same actions as the MapFilter from log4j 1.3. 
40  */
41 public class MapRewritePolicy implements RewritePolicy {
42     /**
43      * {@inheritDoc}
44      */
45     public LoggingEvent rewrite(final LoggingEvent source) {
46         Object msg = source.getMessage();
47         if (msg instanceof Map) {
48             Map props = new HashMap(source.getProperties());
49             Map eventProps = (Map) msg;
50             //
51             //   if the map sent in the logging request
52             //      has "message" entry, use that as the message body
53             //      otherwise, use the entire map.
54             //
55             Object newMsg = eventProps.get("message");
56             if (newMsg == null) {
57                 newMsg = msg;
58             }
59
60             for(Iterator iter = eventProps.entrySet().iterator();
61                     iter.hasNext();
62                   ) {
63                 Map.Entry entry = (Map.Entry) iter.next();
64                 if (!("message".equals(entry.getKey()))) {
65                     props.put(entry.getKey(), entry.getValue());
66                 }
67             }
68
69             return new LoggingEvent(
70                     source.getFQNOfLoggerClass(),
71                     source.getLogger() != null ? source.getLogger(): Logger.getLogger(source.getLoggerName()), 
72                     source.getTimeStamp(),
73                     source.getLevel(),
74                     newMsg,
75                     source.getThreadName(),
76                     source.getThrowableInformation(),
77                     source.getNDC(),
78                     source.getLocationInformation(),
79                     props);
80         } else {
81             return source;
82         }
83
84     }
85 }