/* * ==================================================================== * Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://svnkit.com/license.html * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.tmatesoft.svn.core.javahl; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.logging.Level; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.util.ISVNDebugLog; import org.tmatesoft.svn.util.SVNDebugLogAdapter; import org.tmatesoft.svn.util.SVNLogType; /** * @author TMate Software Ltd. * @version 1.3 */ public class JavaHLCompositeLog extends SVNDebugLogAdapter { Map myLoggers; public JavaHLCompositeLog() { myLoggers = new HashMap(); } public void addLogger(ISVNDebugLog debugLog) { Boolean needTracing = checkTracing(debugLog); myLoggers.put(debugLog, needTracing); } public void removeLogger(ISVNDebugLog debugLog) { myLoggers.remove(debugLog); } private static Boolean checkTracing(ISVNDebugLog log) { InputStream is = log.createLogStream(SVNLogType.NETWORK, SVNFileUtil.DUMMY_IN); OutputStream os = log.createLogStream(SVNLogType.NETWORK, SVNFileUtil.DUMMY_OUT); if (is == SVNFileUtil.DUMMY_IN && os == SVNFileUtil.DUMMY_OUT) { return Boolean.FALSE; } return Boolean.TRUE; } public InputStream createLogStream(SVNLogType logType, InputStream is) { if (myLoggers.containsValue(Boolean.TRUE)) { return super.createLogStream(logType, is); } return is; } public OutputStream createLogStream(SVNLogType logType, OutputStream os) { if (myLoggers.containsValue(Boolean.TRUE)) { return super.createLogStream(logType, os); } return os; } public void log(SVNLogType logType, String message, byte[] data) { for (Iterator iterator = myLoggers.entrySet().iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); ISVNDebugLog log = (ISVNDebugLog) entry.getKey(); Boolean needTracing = (Boolean) entry.getValue(); if (needTracing.booleanValue()) { log.log(logType, message, data); } } } public void log(SVNLogType logType, Throwable th, Level logLevel) { for (Iterator iterator = myLoggers.keySet().iterator(); iterator.hasNext();) { ISVNDebugLog log = (ISVNDebugLog) iterator.next(); log.log(logType, th, logLevel); } } public void log(SVNLogType logType, String message, Level logLevel) { for (Iterator iterator = myLoggers.keySet().iterator(); iterator.hasNext();) { ISVNDebugLog log = (ISVNDebugLog) iterator.next(); log.log(logType, message, logLevel); } } }