All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.squirrelframework.foundation.fsm.impl.TransitionResultImpl Maven / Gradle / Ivy

package org.squirrelframework.foundation.fsm.impl;

import com.google.common.collect.Lists;
import org.squirrelframework.foundation.fsm.ImmutableState;
import org.squirrelframework.foundation.fsm.StateMachine;
import org.squirrelframework.foundation.fsm.TransitionResult;

import java.util.Collections;
import java.util.List;

class TransitionResultImpl, S, E, C> implements TransitionResult {

    private  boolean accepted;

    private ImmutableState targetState;

    private TransitionResult parent;

    private List> subResults;

    private void addSubResult(TransitionResult subResult) {
        if(subResults==null)
            subResults=Lists.newArrayList();
        subResults.add(subResult);
    }

    @Override
    public boolean isAccepted() {
        if(accepted) {
            return true;
        } else if(subResults!=null) {
            for(TransitionResult subResult : getSubResults()) {
                if(subResult.isAccepted()) return true;
            }
        }
        return false;
    }

    private TransitionResult getRootResult() {
        if(parent==null)
            return this;
        return ((TransitionResultImpl)parent).getRootResult();
    }

    @Override
    public ImmutableState getTargetState() {
        return targetState;
    }

    @Override
    public List> getSubResults() {
        return subResults!=null ? Lists.newArrayList(subResults) :
            Collections.>emptyList();
    }

    @Override
    public List> getAcceptedResults() {
        List> acceptedResults = Lists.newArrayList();
        if(subResults!=null) {
            for(TransitionResult subResult : getSubResults()) {
                acceptedResults.addAll(subResult.getAcceptedResults());
            }
        }
        if(accepted)
            acceptedResults.add(this);
        return acceptedResults;
    }

    @Override
    public TransitionResult getParentResut() {
        return parent;
    }

    @Override
    public TransitionResult setAccepted(boolean accepted) {
        this.accepted = accepted;
        return this;
    }

    @Override
    public TransitionResult setTargetState(ImmutableState targetState) {
        this.targetState = targetState;
        return this;
    }

    @Override
    public TransitionResult setParent(TransitionResult parent) {
        this.parent = parent;
        if(parent!=null && parent instanceof TransitionResultImpl) {
            ((TransitionResultImpl)parent).addSubResult(this);
        }
        return this;
    }

    @Override
    public boolean isDeclined() {
        return !isAccepted();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy