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

org.cogchar.convoid.player.BehaviorContext Maven / Gradle / Ivy

There is a newer version: 1.1.4
Show newest version
package org.cogchar.convoid.player;

import java.util.ArrayList;
import java.util.List;
import org.cogchar.zzz.platform.stub.ThalamentStub;

/**
 *
 * @author Matt Stevenson
 */
public class BehaviorContext extends ThalamentStub {
    //We are extending Thalament so the context will show up on the fact page.
    //Hopefully this will not lead to any confusion about its use in the future

    public enum PromptSource{
        USER,
        TIMER,
        SELF;
    }
    public enum Detail{
        RESET,
        RANDOM,
        BACKUP,
        UNPLAYABLE,
        NO_SELF_RESUME,
        FROM_EXPO,
		REMOTE,
        NO_TRANSITION;
    }
    private String        myIntendedBehaviorType;
    private String        myActualBehaviorType;
    private PromptSource        myPromptSource;
    private String              myPrompt;
    private List        myDetails;
    private IBehaviorPlayable   myBehavior;

    public BehaviorContext(){
        myDetails = new ArrayList();
    }

    public BehaviorContext withIntendedType(String type){
        myIntendedBehaviorType = type;
        return this;
    }
    public BehaviorContext andIntendedType(String type){
        return withIntendedType(type);
    }

    public BehaviorContext withActualType(String type){
        myActualBehaviorType = type;
        return this;
    }
    public BehaviorContext andActualType(String type){
        return withActualType(type);
    }

    public BehaviorContext with(PromptSource source){
        myPromptSource = source;
        return this;
    }
    public BehaviorContext and(PromptSource source){
        return with(source);
    }

    public BehaviorContext withPrompt(String prompt){
        myPrompt = prompt;
        return this;
    }
    public BehaviorContext andPrompt(String prompt){
        return withPrompt(prompt);
    }

    public BehaviorContext with(Detail detail){
        myDetails.add(detail);
        return this;
    }
    public BehaviorContext and(Detail detail){
        return with(detail);
    }

    public BehaviorContext with(IBehaviorPlayable behavior){
        myBehavior = behavior;
        List playDetails = behavior.getDetails();
        myDetails.removeAll(playDetails);
        myDetails.addAll(playDetails);
        return this;
    }

	public boolean isEmptyBehavior(){
		return contains(makeEmpty());
	}

    public BehaviorContext with(BehaviorContext context){
		if(context.myActualBehaviorType != null){
			myActualBehaviorType = context.myActualBehaviorType;
		}
		if(context.myIntendedBehaviorType != null){
			myIntendedBehaviorType = context.myIntendedBehaviorType;
		}
		if(context.myPromptSource != null){
			myPromptSource = context.myPromptSource;
		}
		if(context.myPrompt != null){
			myPrompt = context.myPrompt;
		}
		if(context.myBehavior != null){
			myBehavior = context.myBehavior;
		}
		if(context.myDetails != null && !context.myDetails.isEmpty()){
			for(Detail d : context.myDetails){
				if(!myDetails.contains(d)){
					myDetails.add(d);
				}
			}
		}
        return this;
    }
    public BehaviorContext and(IBehaviorPlayable behavior){
        return with(behavior);
    }

    public String getIntendedBehaviorType(){
        return myIntendedBehaviorType;
    }

    public String getActualBehaviorType(){
        return myActualBehaviorType;
    }

    public PromptSource getPromptSource(){
        return myPromptSource;
    }

    public String getPrompt(){
        return myPrompt;
    }

    public List getDetails(){
        return myDetails;
    }

    public IBehaviorPlayable getBehavior(){
        myBehavior.setCause(this);
        return myBehavior;
    }

    public PlayerAction getPlayerAction(){
        if(myBehavior == null || myBehavior.getAction() == null){
            return PlayerAction.EMPTY;
        }
        return myBehavior.getAction();
    }

    @Override
    public boolean equals(Object obj){
        if(obj.getClass() != BehaviorContext.class){
            return false;
        }
        BehaviorContext bc = (BehaviorContext)obj;

        if(myIntendedBehaviorType == null){
            myIntendedBehaviorType = "";
        }
        if(myActualBehaviorType == null){
            myActualBehaviorType = "";
        }
        return myIntendedBehaviorType.equals(bc.myIntendedBehaviorType) &&
           myActualBehaviorType.equals(bc.myActualBehaviorType) &&
           myPromptSource == bc.myPromptSource &&
           ((myPrompt != null && bc.myPrompt != null && myPrompt.equals(bc.myPrompt)) ||
           (myPrompt == null && bc.myPrompt == null)) &&
           myDetails.equals(bc.myDetails) &&
           myBehavior == bc.myBehavior;
    }

    public BehaviorContext copy(){
        BehaviorContext copy = new BehaviorContext();
        copy.myActualBehaviorType = myActualBehaviorType;
        copy.myBehavior = myBehavior;
        copy.myDetails = new ArrayList(myDetails);
        copy.myIntendedBehaviorType = myIntendedBehaviorType;
        copy.myPrompt = myPrompt;
        copy.myPromptSource = myPromptSource;
        return copy;
    }

    public boolean contains(BehaviorContext bc) {
        if(equals(bc)){
            return true;
        }
        if(bc.myActualBehaviorType != null && !bc.myActualBehaviorType.equals(myActualBehaviorType)){
            return false;
        }else if(bc.myIntendedBehaviorType != null && !bc.myIntendedBehaviorType.equals(myIntendedBehaviorType)){
            return false;
        }else if(bc.myPromptSource != null && bc.myPromptSource != myPromptSource){
            return false;
        }else if(bc.myPrompt != null && !bc.myPrompt.equals(myPrompt)){
            return false;
        }else if(!myDetails.containsAll(bc.myDetails)){
            return false;
        }
        return true;
    }

    @Override
	public String getContentSummaryString() {
		return "intent=" + myIntendedBehaviorType + ", actual=" + myActualBehaviorType +
                ", promptSource=" + myPromptSource + ", prompt=" + myPrompt +
                ", details=" + myDetails + ", playerAction=" + getPlayerAction() +
                ", behavior=" + myBehavior;
	}

	@Override
	public String toString(){
		return "[" + getClass().getSimpleName() + ": " + getContentSummaryString() + "]";
	}

	public static BehaviorContext makeEmpty(){
		return new BehaviorContext().withActualType("EMPTY").and(Detail.UNPLAYABLE).and(new EmptyPlayer());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy