/**
* eAdventure (formerly <e-Adventure> and <e-Game>) is a research project of the
* <e-UCM> research group.
*
* Copyright 2005-2010 <e-UCM> research group.
*
* You can access a list of all the contributors to eAdventure at:
* http://e-adventure.e-ucm.es/contributors
*
* <e-UCM> is a research group of the Department of Software Engineering
* and Artificial Intelligence at the Complutense University of Madrid
* (School of Computer Science).
*
* C Profesor Jose Garcia Santesmases sn,
* 28040 Madrid (Madrid), Spain.
*
* For more info please visit: <http://e-adventure.e-ucm.es> or
* <http://www.e-ucm.es>
*
* ****************************************************************************
*
* This file is part of eAdventure, version 2.0
*
* eAdventure is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* eAdventure 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with eAdventure. If not, see <http://www.gnu.org/licenses/>.
*/
package es.eucm.ead.importer.annotation;
import es.eucm.ead.model.elements.BasicElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
/**
* An annotator that does not record anything.
* Useful for "bare" imports; does support some minor debugging.
* @author mfreire
*/
public class NullAnnotator implements ImportAnnotator {
static private Logger logger = LoggerFactory.getLogger(NullAnnotator.class);
private static ArrayList<BasicElement> stack = new ArrayList<BasicElement>();
private static class PlaceHolder extends BasicElement {
private String id;
public PlaceHolder(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
return (obj != null && ((PlaceHolder) obj).id.equals(id));
}
@Override
public int hashCode() {
return this.id.hashCode();
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "<" + id + ">";
}
}
@Override
public void annotate(Type key, Object... values) {
if (stack.isEmpty()) {
logger.error("Cowardly refusing to annotate: stack is empty!");
} else {
annotate(stack.get(stack.size() - 1), key, values);
}
}
@Override
public void annotate(BasicElement element, Type key, Object... values) {
if (logger.isDebugEnabled()) {
if (element == null) {
element = new PlaceHolder(values[0].toString());
}
switch (key) {
case Open: {
logger.debug("Entering {}", element);
stack.add(element);
break;
}
case Close: {
logger.debug("Exiting {}", element);
int i = stack.lastIndexOf(element);
if (i < 0) {
logger
.error(
"Exiting {} -- no such element currently open in {}",
new Object[] { element, stack });
} else if (i != stack.size() - 1) {
logger.error("Exiting {} -- element is not last in {}",
new Object[] { element, stack });
stack.remove(i);
} else {
stack.remove(i);
}
break;
}
case Comment: {
logger.debug("Annotating {}({}) with {}: Comment --> {}",
new Object[] { element, stack, key, values[0] });
break;
}
default: {
logger.debug("Annotating {}({}) with {}: {} --> {}",
new Object[] { element, stack, key, values[0],
values[1] });
}
}
}
}
}