    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     */
    017    package org.apache.logging.slf4j;
    018
    019    import java.util.ArrayList;
    020    import java.util.Iterator;
    021    import java.util.List;
    022
    023    import org.apache.logging.log4j.MarkerManager;
    024    import org.slf4j.IMarkerFactory;
    025    import org.slf4j.Marker;
    026    import org.slf4j.impl.StaticMarkerBinder;
    027
    028    /**
    029     * Log4j/SLF4J {@link org.slf4j.Marker} type bridge.
    030     */
    031    public class Log4jMarker implements Marker {
    032
    033        public static final long serialVersionUID = 1590472L;
    034
    035        private final IMarkerFactory factory = StaticMarkerBinder.SINGLETON.getMarkerFactory();
    036
    037        private final org.apache.logging.log4j.Marker marker;
    038
    039        /**
    040         * Constructs a Log4jMarker using an existing Log4j {@link org.apache.logging.log4j.Marker}.
    041         * @param marker The Log4j Marker upon which to base this Marker.
    042         */
    043        public Log4jMarker(final org.apache.logging.log4j.Marker marker) {
    044            this.marker = marker;
    045        }
    046
    047        public org.apache.logging.log4j.Marker getLog4jMarker() {
    048            return marker;
    049        }
    050
    051        @Override
    052        public void add(final Marker marker) {
    053            final Marker m = factory.getMarker(marker.getName());
    054            this.marker.addParents(((Log4jMarker)m).getLog4jMarker());
    055        }
    056
    057        @Override
    058        public boolean remove(final Marker marker) {
    059            return this.marker.remove(MarkerManager.getMarker(marker.getName()));
    060        }
    061
    062        @Override
    063        public String getName() {
    064            return marker.getName();
    065        }
    066
    067        @Override
    068        public boolean hasReferences() {
    069            return marker.hasParents();
    070        }
    071
    072        @Override
    073        public boolean hasChildren() {
    074            return marker.hasParents();
    075        }
    076
    077        @Override
    078        @SuppressWarnings("rawtypes")
    079        public Iterator iterator() {
    080            final List<Marker> parents = new ArrayList<Marker>();
    081            for (final org.apache.logging.log4j.Marker m : this.marker.getParents()) {
    082                parents.add(factory.getMarker(m.getName()));
    083            }
    084            return parents.iterator();
    085        }
    086
    087        @Override
    088        public boolean contains(final org.slf4j.Marker marker) {
    089            return this.marker.isInstanceOf(marker.getName());
    090        }
    091
    092        @Override
    093        public boolean contains(final String s) {
    094            return this.marker.isInstanceOf(s);
    095        }
    096    }