/******************************************************************************* * This file is part of logisim-evolution. * * logisim-evolution is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * logisim-evolution is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with logisim-evolution. If not, see <http://www.gnu.org/licenses/>. * * Original code by Carl Burch (http://www.cburch.com), 2011. * Subsequent modifications by : * + Haute École Spécialisée Bernoise * http://www.bfh.ch * + Haute École du paysage, d'ingénierie et d'architecture de Genève * http://hepia.hesge.ch/ * + Haute École d'Ingénierie et de Gestion du Canton de Vaud * http://www.heig-vd.ch/ * The project is currently maintained by : * + REDS Institute - HEIG-VD * Yverdon-les-Bains, Switzerland * http://reds.heig-vd.ch *******************************************************************************/ package com.cburch.logisim.instance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.cburch.logisim.circuit.CircuitState; import com.cburch.logisim.data.Value; import com.cburch.logisim.gui.log.Loggable; class InstanceLoggerAdapter implements Loggable { final static Logger loggerS = LoggerFactory .getLogger(InstanceLoggerAdapter.class); private InstanceComponent comp; private InstanceLogger logger; private InstanceStateImpl state; public InstanceLoggerAdapter(InstanceComponent comp, Class<? extends InstanceLogger> loggerClass) { try { this.comp = comp; this.logger = loggerClass.newInstance(); this.state = new InstanceStateImpl(null, comp); } catch (Exception t) { handleError(t, loggerClass); logger = null; } } public String getLogName(Object option) { if (logger != null) { return logger.getLogName(state, option); } else { return null; } } public Object[] getLogOptions(CircuitState circState) { if (logger != null) { updateState(circState); return logger.getLogOptions(state); } else { return null; } } public Value getLogValue(CircuitState circuitState, Object option) { if (logger != null) { updateState(circuitState); return logger.getLogValue(state, option); } else { return Value.UNKNOWN; } } private void handleError(Throwable t, Class<? extends InstanceLogger> loggerClass) { String className = loggerClass.getName(); loggerS.error("Error while instantiating logger {}: {}", className, t .getClass().getName()); String msg = t.getMessage(); if (msg != null) loggerS.error(" ({})", msg); // OK } private void updateState(CircuitState circuitState) { if (state.getCircuitState() != circuitState) { state.repurpose(circuitState, comp); } } }