fujaba/NetworkParser

View on GitHub
src/main/java/de/uniks/networkparser/parser/DebugCondition.java

Summary

Maintainability
B
5 hrs
Test Coverage
package de.uniks.networkparser.parser;

import de.uniks.networkparser.NetworkParserLog;
import de.uniks.networkparser.SimpleEvent;
import de.uniks.networkparser.SimpleException;
import de.uniks.networkparser.buffer.CharacterBuffer;
import de.uniks.networkparser.interfaces.LocalisationInterface;
import de.uniks.networkparser.interfaces.ObjectCondition;
import de.uniks.networkparser.interfaces.ParserCondition;
import de.uniks.networkparser.interfaces.SendableEntityCreator;
import de.uniks.networkparser.interfaces.TemplateParser;
import de.uniks.networkparser.logic.Equals;
import de.uniks.networkparser.logic.Not;
import de.uniks.networkparser.logic.VariableCondition;

/**
 * DebugCondition for Debug Templates create is parsing exeuteTemplate is
 * Execute Template
 * 
 * @author Stefan DebugCondition
 */
public class DebugCondition implements ParserCondition, SendableEntityCreator {
    public static final String KEY = "debug";
    private int line = -1;
    private NetworkParserLog logger = new NetworkParserLog();
    private ObjectCondition condition;

    public DebugCondition withLine(int value) {
        this.line = value;
        return this;
    }

    @Override
    public boolean update(Object evt) {
        if (condition != null) {
            if (condition.update(evt)) {
                Object newValue = null;
                if (evt instanceof SimpleEvent) {
                    SimpleEvent simpleEvt = (SimpleEvent) evt;
                    newValue = simpleEvt.getNewValue();
                }
                logger.debug(this, "update", newValue);
            }
        }
        if (evt instanceof TemplateResultFragment) {
            exeuteTemplate((TemplateResultFragment) evt);
        }
        if (evt instanceof SimpleEvent) {
            SimpleEvent simpleEvt = (SimpleEvent) evt;
            if (simpleEvt.getSource() instanceof ParserEntity) {
                if (NetworkParserLog.DEBUG.equals(simpleEvt.getType()) && line >= 0) {
                    logger.debug(this, "update", simpleEvt.getNewValue());
                    if (line == simpleEvt.getIndex()) {
                        logger.debug(this, "update", "DEBUG");
                    }
                } else if (ParserEntity.ERROR.equals(simpleEvt.getType())) {
                    logger.error(this, "update", simpleEvt.getNewValue());
                    throw new SimpleException("parse error");
                }
            }
        }
        return true;
    }

    public boolean exeuteTemplate(TemplateResultFragment fragment) {
        return true;
    }

    @Override
    public void create(CharacterBuffer buffer, TemplateParser parser, LocalisationInterface customTemplate) {
        /* CREATE FIELD */
        if (buffer == null) {
            return;
        }
        /* Skip Word */
        /* IF CONDITION */
        CharacterBuffer tokenPart = buffer.nextToken(false, SPLITEND, ENTER, '!');
        if (tokenPart.length() > 0) {
            char currentChar = buffer.getCurrentChar();
            VariableCondition left = VariableCondition.create(tokenPart, true);
            if (currentChar == '!' || currentChar == ENTER) {
                char nextChar = buffer.getChar();
                if (nextChar == ENTER) {
                    Equals equalsExpression = new Equals();
                    equalsExpression.withLeft(left);
                    equalsExpression.create(buffer, parser, customTemplate);
                    if (currentChar == '!') {
                        condition = new Not().with(equalsExpression);
                    } else {
                        condition = equalsExpression;
                    }
                }
            } else {
                condition = left;
            }
            buffer.skip();
        }
        /* SKIP TO END */
        buffer.skip();
    }

    @Override
    public boolean setValue(Object entity, String attribute, Object value, String type) {
        return true;
    }

    @Override
    public Object getValue(LocalisationInterface variables) {
        return null;
    }

    @Override
    public String getKey() {
        return KEY;
    }

    @Override
    public Object getSendableInstance(boolean isExpression) {
        return new DebugCondition();
    }

    @Override
    public boolean isExpression() {
        return false;
    }

    @Override
    public String[] getProperties() {
        return null;
    }

    @Override
    public Object getValue(Object entity, String attribute) {
        return null;
    }

    @Override
    public String toString() {
        return "{{#DEBUG}}";
    }
}