
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