tikhomirov@295: /* tikhomirov@388: * Copyright (c) 2011-2012 TMate Software Ltd tikhomirov@295: * tikhomirov@295: * This program is free software; you can redistribute it and/or modify tikhomirov@295: * it under the terms of the GNU General Public License as published by tikhomirov@295: * the Free Software Foundation; version 2 of the License. tikhomirov@295: * tikhomirov@295: * This program is distributed in the hope that it will be useful, tikhomirov@295: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@295: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@295: * GNU General Public License for more details. tikhomirov@295: * tikhomirov@295: * For information on how to redistribute this software under tikhomirov@295: * the terms of a license other than GNU General Public License tikhomirov@295: * contact TMate Software at support@hg4j.com tikhomirov@295: */ tikhomirov@295: package org.tmatesoft.hg.internal; tikhomirov@295: tikhomirov@388: import java.util.Collections; tikhomirov@388: import java.util.Map; tikhomirov@388: tikhomirov@295: import org.tmatesoft.hg.core.SessionContext; tikhomirov@295: import org.tmatesoft.hg.util.LogFacility; tikhomirov@456: import org.tmatesoft.hg.util.LogFacility.Severity; tikhomirov@295: tikhomirov@295: /** tikhomirov@295: * tikhomirov@295: * @author Artem Tikhomirov tikhomirov@295: * @author TMate Software Ltd. tikhomirov@295: */ tikhomirov@456: public class BasicSessionContext extends SessionContext { tikhomirov@295: tikhomirov@407: private LogFacility logFacility; tikhomirov@388: private final Map properties; tikhomirov@295: tikhomirov@431: public BasicSessionContext(LogFacility log) { tikhomirov@431: this(null, log); tikhomirov@388: } tikhomirov@388: tikhomirov@388: @SuppressWarnings("unchecked") tikhomirov@431: public BasicSessionContext(Map propertyOverrides, LogFacility log) { tikhomirov@407: logFacility = log; tikhomirov@388: properties = propertyOverrides == null ? Collections.emptyMap() : (Map) propertyOverrides; tikhomirov@295: } tikhomirov@295: tikhomirov@456: @Override tikhomirov@295: public LogFacility getLog() { tikhomirov@295: // e.g. for exceptions that we can't handle but log (e.g. FileNotFoundException when we've checked beforehand file.canRead() tikhomirov@407: if (logFacility == null) { tikhomirov@456: PropertyMarshal pm = new PropertyMarshal(this); tikhomirov@456: boolean needDebug = pm.getBoolean("hg4j.consolelog.debug", false); tikhomirov@456: boolean needInfo = pm.getBoolean("hg4j.consolelog.info", false); tikhomirov@456: boolean needTime = pm.getBoolean("hg4j.consolelog.tstamp", true); tikhomirov@456: Severity l = needDebug ? Severity.Debug : (needInfo ? Severity.Info : Severity.Warn); tikhomirov@456: logFacility = new StreamLogFacility(l, needTime, System.out); tikhomirov@407: } tikhomirov@295: return logFacility; tikhomirov@295: } tikhomirov@407: tikhomirov@456: // specific helpers for boolean and int values are available from PropertyMarshal tikhomirov@456: @Override tikhomirov@456: public Object getConfigurationProperty(String name, Object defaultValue) { tikhomirov@407: // NOTE, this method is invoked from getLog(), hence do not call getLog from here unless changed appropriately tikhomirov@388: Object value = properties.get(name); tikhomirov@388: if (value != null) { tikhomirov@388: return value; tikhomirov@388: } tikhomirov@388: value = System.getProperty(name); tikhomirov@338: return value == null ? defaultValue : value; tikhomirov@338: } tikhomirov@295: }